繁体   English   中英

Laravel 5雄辩的ORM多关系

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM