2014-12-04 125 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