我有$donor
,这是Donor
模型。
此外,我Log
与Donor
模式中此关系定义的Donor
相关联:
public function Log(){
return $this->hasMany(Log::class,'DonorID','DonorID');
}
$donor->load('Log');
,急切加载与Donor
关联的所有Log
,会返回以下内容
{
"DonorID": "59060001",
"DonorCitizenID": "1000000000009",
"DonorPrefix": "Mx.",
"DonorName": "John",
"DonorSurname": "Smith",
"created_at": "2016-06-21 08:06:44.000",
"updated_at": "2016-06-23 02:15:10.000",
"log": [
{
"LogID": 6,
"DonorID": "59060001",
"EventTypeID": "1",
"EventDate": "2016-06-15",
"EventBrief": "Donor Added",
"created_at": "2016-06-15 06:01:06.000",
"updated_at": "2016-06-15 06:01:06.000"
},
{
"LogID": 21,
"DonorID": "59060001",
"EventTypeID": "2",
"EventDate": "2016-06-23",
"EventBrief": "Donor has rested in peace.",
"created_at": "2016-06-23 02:30:49.000",
"updated_at": "2016-06-23 02:30:49.000"
}
]
}
现在,我有这个查询代码,它从字段中获取输入的文本,找到特定的donor
,然后返回它。
$donors = Donor::
where('DonorCitizenID', 'LIKE', '%'.Input::get('DonorCitizenID').'%')->
where('DonorName', 'LIKE', '%'.Input::get('DonorName').'%')->
where('DonorSurname', 'LIKE', '%'.Input::get('DonorSurname').'%')->
get();
正如它所说的那样,获取所有Donor
,只要它符合多个条件,并且只要我匹配的数据存储在Donor
中,它就能很好地工作。 / p>
但是,我想要另一个搜索字段。这个匹配最新 Log
(因为一个Donor
可以在任何捐赠者中拥有多个Log
s,方法是匹配加载中的EventTypeID
Log
。我怎样才能写出这样做的条件?
请注意,返回的值应该是符合条件的所有Donor
的列表。
答案 0 :(得分:1)
如果我明白你在说什么,它应该这样做
修改强>
$donors = Donor::
where('DonorCitizenID', 'LIKE', '%'.Input::get('DonorCitizenID').'%')
->where('DonorName', 'LIKE', '%'.Input::get('DonorName').'%')
->where('DonorSurname', 'LIKE', '%'.Input::get('DonorSurname').'%')
->with(['Log' => function ($query) {
$query->where('EventType', 'LIKE', '%'.Input::get('EventType').'%')->get();
}])->get();
$donor->Log // result
答案 1 :(得分:0)
使用whereHas
method
$donors = Donor::
where('DonorCitizenID', 'LIKE', '%'.Input::get('DonorCitizenID').'%')
->where('DonorName', 'LIKE', '%'.Input::get('DonorName').'%')
->where('DonorSurname', 'LIKE', '%'.Input::get('DonorSurname').'%')
->whereHas('Log', function ($query) {
$query->where('EventType', 'LIKE', '%'.Input::get('EventType').'%');
})->get();