Laravel:跨关系定义的表

时间:2016-06-23 02:23:17

标签: laravel

我有$donor,这是Donor模型。

此外,我LogDonor模式中此关系定义的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的列表。

2 个答案:

答案 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();