Intereting Posts
Как преобразовать текст в хеш phpbb? PHP. Является ли uniqid («») хорошим практическим решением для создания уникальной и последовательной стороны сервера? Как сделать Rest Remover Password и изменить поле электронной почты пользователя в поле имени пользователя с помощью Laravel 5.0? Что делает `session.entropy_length` в` PHP.ini`? Как сохранить строку html5 Canvas.toDataURl как png на php-сервере Как проверить эффективность скрипта PHP У меня есть форма, в которой, если пользователь вводит ввод, он должен проверять наличие отрицательного или пустого поля ввода и выдавать предупреждающее сообщение как sprintf () снова защищает SQL-инъекцию? Разрешить загрузке страницы только в iframe и предотвращать прямой доступ Как передать массив в highchart ?? Yii2 Gridview – Как использовать итоговые значения для нижнего уровня angularjs – POST массив объектов (данные JSON) на страницу PHP Множественные атрибуты стирания входящего соединения Функция обратного вызова функции Javascript для php-кода Загрузка мультимедиа не работает в редакторе настраиваемых модулей magento

Как я могу запросить raw через Eloquent?

Я пытаюсь сделать запрос в моем приложении 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)