Как вы проверяете, не пустое поле с Eloquent?
Я попробовал Model::where('sent_at', 'IS NOT', DB::raw('null'))->...
, но вместо > IS NOT
вместо привязки был привязан.
Об этом говорит DB::getQueryLog()
:
'query' => string 'select * from my_table where sent_at = ? and profile_id in (?, ?) order by created_at desc' (length=101)
'bindings' =>
array (size=3)
0 => string 'IS NOT' (length=6)
1 => int 1
2 => int 4
У Eloquent есть метод для этого (Laravel 4. */5. *);
Model::whereNotNull('sent_at')
Ларавелла 3:
Model::where_not_null('sent_at')
whereNull('deleted_at')
и мой запрос запущен.
Если кто-то вроде меня хочет сделать это с построителем запросов в Laravel 5.2.23, это можно сделать как →
$searchResultQuery = Users::query();
$searchResultQuery->where('status_message', '<>', '', 'and'); // is not null
$searchResultQuery->where('is_deleted', 'IS NULL', null, 'and'); // is null
Или с областью действия в модели:
public function scopeNotNullOnly($query){
return $query->where('status_message', '<>', '');
}
'and'
?
public function where($column, $operator = null, $value = null, $boolean = 'and');
и местоположение - ".....\vendor\laravel\framework\src\Illuminate\Database\Query\Builder.php"
Если вы хотите использовать фасад БД:
DB::table('table_name')->whereNotNull('sent_at')->get();
Мы можем использовать
Model::whereNotNull('sent_at');
Или
Model::whereRaw('sent_at is not null');
Я вижу, что этот вопрос немного устарел, но я наткнулся на него в поисках ответа. Хотя у меня не было успеха с ответами здесь, я думаю, что это может быть, потому что я нахожусь на PHP 7.2 и Laravel 5.7. или возможно, потому что я просто играл с данными из CLI, используя Laravel Tinker.
У меня есть кое-какие вещи, которые я пробовал, которые спомогли мне, и другие, которые не помогли, надеюсь, помогут другим.
MyModel::whereNotNull('deleted_by')->get()->all(); // []
MyModel::where('deleted_by', '<>', null)->get()->all(); // []
MyModel::where('deleted_by', '!=', null)->get()->all(); // []
MyModel::where('deleted_by', '<>', '', 'and')->get()->all(); // []
MyModel::where('deleted_by', '<>', null, 'and')->get()->all(); // []
MyModel::where('deleted_by', 'IS NOT', null)->get()->all(); // []
Все вышеперечисленное вернуло мне пустой массив
DB::table('my_models')->whereNotNull('deleted_by')->get()->all(); // [ ... ]
Это вернуло все результаты в массиве, как я и ожидал. Примечание: вы можете удалить all()
и получить обратно Illuminate\Database\Eloquent\Collection вместо массива, если хотите.
$searchResultQuery = Users::query();
$searchResultQuery->where('status_message', '<>', '', 'and'); // is not null
$searchResultQuery->where('is_deleted', 'IS NULL', null, 'and'); // is null
в laravel 5.4 этот код Model:: whereNotNull ('column') не работал, вам нужно добавить get() как этот Model:: whereNotNull ('column') → get(); это отлично работает для меня:)
Если вы хотите искать удаленную запись (Soft Deleted Record), do't пользователь Eloquent Model Query. Вместо этого используйте запрос Db:: table например Вместо использования ниже:
$stu = Student::where('rollNum', '=', $rollNum . '-' . $nursery)->first();
Использование:
$stu = DB::table('students')->where('rollNum', '=', $newRollNo)->first();
Db::table
для поиска удаленных записей. Вы можете отфильтровать их с помощью метода withTrashed()
, как сказано в документации: laravel.com/docs/5.3/eloquent
!=
Вместо НЕ.