簡體   English   中英

Laravel 4 Eloquent的關系無法正常工作

[英]Relation of Laravel 4 Eloquent not working

我正在設置兩個模型。 假設我們有一個Portfolio和Portfolio_category表

表組合

id
cat_id
name
status

表Portfolio_category

cat_id
cat_name

模型

class Portfolio extends \Eloquent {
    protected $fillable = [];   
    public function portfolio_category() 
    {
        return $this->hasMany('Portfolio_category');
    }
}

class Portfolio_category extends \Eloquent {
    protected $fillable = [];
    public function portfolio() 
    {
        return $this->belongsTo('Portfolio');
    }
}

我的代碼:

$data = Portfolio::all();
foreach($data as $value){
    $id = $value['id'];
    $name = $value['name'];
    $cat_name = $value['cat_name'];
}

我想顯示類別名稱,但它顯示空值。

我很困惑,怎么了? 任何想法!!!

我得到了答案

$data = Portfolio::join('portfolio_category', 'portfolio_category.cat_id', '=', 'portfolio.cat_id')->get();
foreach($data as $value){
    $id = $value['id'];
    $name = $value['name'];
    $cat_name = $value['cat_name'];
}

您的人際關系定義不正確。 在您的代碼中,您嘗試將Portfolio定義為父項,並將Portfolio_category定義為子項。 但是,您的表被設置為Portfolio_category是父級,而Portfolio是子級。 基本上,包含外鍵的表(組合表具有對Portfolio_category的外鍵)應該在belongsTo端。

因此,與其將hasMany Portfolio_category和Portfolio_category屬於toy Portfolio轉換為投資組合,還需要將其切換到hasMany投資組合和togostayTo Portfolio_category的投資組合_category。

另外,為簡便起見,我假設將它們刪除了,但是Portfolio_category表上的表名和主鍵不符合Laravel約定,因此您需要在模型中指定這些屬性。

您的模型應如下所示:

class Portfolio extends \Eloquent {
    protected $table = 'portfolio';
    protected $fillable = [];

    public function portfolio_category()
    {
        return $this->belongsTo('Portfolio_category');
    }
}

class Portfolio_category extends \Eloquent {
    protected $table = 'portfolio_category';
    protected $primaryKey = 'cat_id';
    protected $fillable = [];

    public function portfolios() 
    {
        return $this->hasMany('Portfolio');
    }
}

現在,您可以通過關系訪問相關表:

$data = Portfolio::with('portfolio_category')->get();
foreach($data as $value){
    $id = $value->id;
    $name = $value->name;
    $cat_name = $value->portfolio_category->cat_name;
}

有關Eloquent ORM的更多信息,可在此處(L4.2)此處(L5.0)找到文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM