Я пытаюсь сделать запрос в моем приложении Laravel, и я хочу использовать обычную структуру для моего запроса. Этот класс либо использует Eloquent, поэтому мне нужно найти что-то, чтобы сделать запрос полностью сырым.
 Может быть что-то вроде Model::query($query);  ,  Только это не работает. 
  используйте DB::statement('your raw query here') .  Надеюсь это поможет. 
Вы можете попробовать следующее:
 // query can't be select * from table where Model::select(DB::raw('query'))->get(); 
Пример:
 Model::select(DB::raw('query')) ->whereNull('deleted_at') ->orderBy('id') ->get(); 
Кроме того, вы можете использовать что-то вроде этого (с помощью Query Builder):
 $users = DB::table('users') ->select(DB::raw('count(*) as user_count, status')) ->where('status', '<>', 1) ->groupBy('status') ->get(); 
Кроме того, вы можете попробовать что-то вроде этого (с помощью Query Builder):
 $users = DB::select('select * from users where id = ?', array(1)); $users = DB::select( DB::raw("select * from users where username = :username"), array('username' => Input::get("username"))); 
  Узнайте больше о Raw-Expressions на сайте Laravel . 
Я не думаю, что вы можете по умолчанию. Я расширил Eloquent и добавил следующий метод.
 /** * Creates models from the raw results (it does not check the fillable attributes and so on) * @param array $rawResult * @return Collection */ public static function modelsFromRawResults($rawResult = []) { $objects = []; foreach($rawResult as $result) { $object = new static(); $object->setRawAttributes((array)$result, true); $objects[] = $object; } return new Collection($objects); } 
Затем вы можете сделать что-то вроде этого:
 class User extends Elegant { // Elegant is my extension of Eloquent public static function getWithSuperFancyQuery() { $result = DB::raw('super fancy query here, make sure you have the correct columns'); return static::modelsFromRawResults($result); } } 
Вы можете сократить обработку результатов, написав
 $objects = new Collection(array_map(function($entry) { return (new static())->setRawAttributes((array) $entry, true); }, $result)); 
Старый вопрос, уже ответил, я знаю.
Однако никто не упоминает класс Expression.
Конечно, это может не решить вашу проблему, потому что ваш вопрос оставляет его двусмысленным относительно того, где в SQL должно быть включено условие Raw (это в инструкции SELECT или в инструкции WHERE?). Тем не менее, эта информация, которую вы можете найти полезной независимо.
Включите следующий класс в файл модели:
 use Illuminate\Database\Query\Expression; 
Затем внутри класса Model определите новую переменную
 protected $select_cols = [ 'id', 'name', 'foo', 'bar', Expression ('(select count(1) from sub_table where sub_table.x = top_table.x) as my_raw_col'), 'blah' ] 
И добавьте область действия:
 public function scopeMyFind ($builder, $id) { return parent::find ($id, $this->select_cols); } 
Затем из вашего контроллера или логического файла вы просто вызываете:
 $rec = MyModel::myFind(1); dd ($rec->id, $rec->blah, $rec->my_raw_col); 
Счастливые дни.
(Работает в рамках Laravel 5.5)