2014-12-04 49 views
0

我有模型,名爲雜誌。這個模型代表雜誌桌子。許多對一張桌子,在laravel的關係

magazines 
--id 
--name 

我也有模型,命名爲轉移。這個模型是轉移表的代表。 在這張表中,我希望存儲有關產品轉移的信息。

transfers 
--id 
--source 
--target 

有兩個重要的欄目,來源是我獲得產品的雜誌ID,目標是我放置產品的雜誌的ID。

我應該如何在Eloquent模型中建立關係?我做了這樣的事情

public function source() 
{ 
    return $this->belongsTo('Magazine', 'source'); 
} 

public function target() 
{ 
    return $this->belongsTo('Magazine', 'target'); 
} 

但是,不起作用。如果我調用$ transfer-> source,我只能得到存儲在這個列中的id(整數值)。但我想獲得雜誌對象。如果將方法名稱從source()更改爲magazine(),Eloquent會返回Magazine對象,這是正確的。

我應該如何建立關係,如果源和目標在同一臺

回答

1

你的領域和方法重疊的名字。所以現在你可以這樣做:

$transfer->source()->getResult()->name; 

但顯然這不是處理關係的方式。

也就是說,要使其按預期方式工作,請將重命名爲方法或表格字段。我建議這樣做:

table transfers: id, source_id, target_id 

// Transfer model 
public function source() 
{ 
    return $this->belongsTo('Magazine', 'source_id'); 
} 

public function target() 
{ 
    return $this->belongsTo('Magazine', 'target_id'); 
} 
+0

謝謝!我只更改了表格字段。它是如此容易。 – 2014-12-04 16:03:23

0

表示如果調用$transfer->source你只會得到的ID。 你需要加載你的源太

$transfer = Transfer::with('source')->find(123); 

,然後訪問源

$nameOfSource = $transfer->source->name 
+1

只要'屬性'和'關係'具有相同的名稱,則加載並不重要。 – 2014-12-04 15:50:14