Dan*_*tti 5 php laravel laravel-5.2
我有一个具有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);
});
}
}
Run Code Online (Sandbox Code Playgroud)
这种关系的逻辑是,每次调用所属的广告,如果两个表中gsm_numbers匹配和call_start从运动起始日期或者未设置或小于呼叫模型和运动模型END_DATE call_start是枯萎没有设置或者是更大来自Call Model的call_start
在控制器我做:
$calls = Call::orderBy('call_start','DESC')->get(); //in simplest form
return view('calls')->with('calls',$calls);
Run Code Online (Sandbox Code Playgroud)
在View for campaign列表中,我还使用以下内容显示广告系列信息
@foreach($calls as $call)
{{ $call->campaign['name'] }}
@endforeach
Run Code Online (Sandbox Code Playgroud)
没问题,但我需要对ajax调用执行相同的问题,所以我需要调用数据和广告系列.所以我做了以下几点
$calls = Call::with('campaign')->orderBy('call_start','DESC')
->get();
if($request->ajax()){
return $calls
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我得到例外 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))
Run Code Online (Sandbox Code Playgroud)
您无法在日期时间字段上执行空比较.在添加where子句之前,您需要确保$ callStart不为null->orWhere('end_date','>=',$callStart);
$call->campaign['name']
Run Code Online (Sandbox Code Playgroud)
因为$ call存在而起作用.也就是说,它包含数据.因此$callStart = $this->call_start;不会为空.但是当你有
$calls = Call::with('campaign')->orderBy('call_start','DESC')->get();
查询构建器调用您的关系"campaign",并将您的$callStart = $this->call_start;值计算为null,因为Call还不是一个有效的模型实例,还没有设置数据,因此call_start属性在该点将为null.
| 归档时间: |
|
| 查看次数: |
14441 次 |
| 最近记录: |