Laravel Недопустимый оператор и комбинация значений Exception on with () с отношением ownTo ()

У меня есть модель вызова с отношением belongsTo () следующим образом

class Call extends Model { public function campaign() { $callStart = $this->call_start; return $this->belongsTo('App\Campaign','gsm_number','gsm_number') ->where(function($query) use($callStart){ $query->where('end_date','=','0000-00-00 00:00:00') ->orWhere('end_date','>=',$callStart); })->where(function($query) use($callStart){ $query->where('start_date','=','0000-00-00 00:00:00') ->orWhere('start_date','<=',$callStart); }); } } 

Логика этого отношения состоит в том, что каждый вызов принадлежит кампании, если gsm_numbers в обеих таблицах совпадают, а call_start из start_date в Кампании либо не задано, либо меньше, чем call_start в модели Call, а end_date в модели Campaign не увядает, или больше чем call_start из Call Model

В контроллере я делаю:

 $calls = Call::orderBy('call_start','DESC')->get(); //in simplest form return view('calls')->with('calls',$calls); 

В списке «Просмотр для кампаний» я показываю информацию о кампании, используя следующие

 @foreach($calls as $call) {{ $call->campaign['name'] }} @endforeach 

Нет проблем, но мне нужно выполнить такую ​​же проблему с вызовами ajax, поэтому мне нужны данные вызовов вместе с кампаниями. Поэтому я делаю следующее

 $calls = Call::with('campaign')->orderBy('call_start','DESC') ->get(); if($request->ajax()){ return $calls } 

В этом случае я получаю исключение InvalidArgumentException in Builder.php line 464: Illegal operator and value combination.

Исключительный стек:

 in Builder.php line 464 at Builder->where('end_date', '>=', null, 'or') at call_user_func_array(array(object(Builder), 'where'), array('end_date', '>=', null, 'or')) in Builder.php line 640 at Builder->where('end_date', '>=', null, 'or') in Builder.php line 656 at Builder->orWhere('end_date', '>=', null) in Call.php line 51 at Call->App\{closure}(object(Builder)) 

Solutions Collecting From Web of "Laravel Недопустимый оператор и комбинация значений Exception on with () с отношением ownTo ()"

Вы не можете выполнить нулевое сравнение в поле datetime. Вы должны убедиться, что $ callStart не имеет значения null до добавления предложения where ->orWhere('end_date','>=',$callStart);

  $call->campaign['name'] 

работает, потому что существует $ call. то есть он содержит данные. следовательно $callStart = $this->call_start; не будет null. но когда у вас есть

$calls = Call::with('campaign')->orderBy('call_start','DESC')->get();

построитель запросов вызывает ваше отношение «кампания» и оценивает ваш $callStart = $this->call_start; как null, так как Call еще не является допустимым экземпляром модели, к нему еще не установлены данные, поэтому атрибут call_start будет null в этой точке.