我有两个型号
model_1
model_2
model_1
有很多model_2
现在我想关联model_1 hasMany model_2与多列匹配。
让我举一个原始查询的例子
select ...... from model_1 left join model_2 ON (model_1.f1 = model_2.f1 AND model_1.f2 = model_2.f2)
如何在hasMany
关联
答案 0 :(得分:0)
我通过在模型中添加一个额外的参数来加入它:
public function my_joined_columns($mySecondJoinColumnValue)
{
return $this->hasMany('NamespaceToOtherModel', 'myIdColumn')
->where('my_second_join_column', $mySecondJoinColumnValue);
}
然后我确保传入参数:
MyModel1::find(1)->my_joined_columns(2)->get()
答案 1 :(得分:0)
我在处理预先存在的架构时遇到了这种情况。我想出了this solution
安装Compoships并在模型 model_1 和 model_2 中进行配置后,您可以定义与多列匹配的关系。
在model_1中:
public function model_2()
{
return $this->hasMany(model_2::class, ['f1', 'f2'], ['f1', 'f2']);
}
在model_2中:
public function model_1()
{
return $this->belongsTo(model_1::class, ['f1', 'f2'], ['f1', 'f2']);
}
Compoships支持急切加载。
答案 2 :(得分:-1)
官方Laravel Docummentation说: http://laravel.com/docs/5.1/eloquent-relationships#one-to-many