簡體   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