[英]Laravel 5 Eloquent ORM multi relation
我是Laravel的新手,我正在尝试创建模型之间的关系。 我的表是:
patch
id
title
area
id
location
area_patch
id
patch_id
area_id
user_area_patch
id
area_patch_id
plant_id
plant_date
用户模型的“补丁”功能应执行以下操作:
SELECT
p.id, p.title, up.plant_id, up.plant_date
FROM
rsst_farming_patch p
JOIN rsst_farming_area_patch pp,
rsst_farming_user_patch up ON pp.id = up.area_patch_id AND p.id = pp.patch_id WHERE up.user_id = 1
我的模特:
class User extends Model {
public function patchs() {
//return user patchs
}
}
class Patch extends Model {
public function area() {
//return area that this patch belongs to
}
}
class Area extends Model {
public function patchs() {
//return available patchs
}
}
有人可以举一个例子吗? 我想研究一下。 我在搞乱用户模型,belongsToMany和hasManyThrough,但是没有运气。
您可能需要稍微修改表结构以实现此目的。
我在user_area_patch
表中看到您正在尝试将用户,区域和补丁链接在一起。 通常,这不是我在laravel中完成的方式。 通常,您使用数据透视表将两个项目链接在一起。 因此,让我提出如下建议:
修补程序是否属于一个用户? 如果是这样,则应在补丁表中添加一个user_id。
patch
id
user_id
area_id
title
一个补丁可以位于多个区域吗? 我对此表示怀疑,因此也要添加一个area_id
。
class User extends Model {
public function patchs() {
return $this->hasMany('App/Patch', 'user_id');
}
}
class Patch extends Model {
public function area() {
return $this->belongsTo('App\Area', 'area_id');
}
}
class Area extends Model {
public function patchs() {
return $this->hasMany('App\Patch', 'patch_id');
}
}
然后,您可以开始引用您的补丁,例如:
$patchs = User::find(1)->patchs()
或补丁所属的区域
Patch::find(1)->area()
和一个区域中的所有补丁
Area::find(1)->patchs()
这有帮助吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.