很多人对一张桌子,laravel的关系

时间:2014-12-04 14:24:17

标签: laravel eloquent relationship

我有模特,名为杂志。这个模型代表了杂志表。

magazines
--id
--name

我也有模型,名为Transfer。该模型代表转移表。 在此表中,我希望存储有关产品转移的信息。

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对象,这是正确的。

如果源和目标指示在同一个表中,我应该如何创建关系

2 个答案:

答案 0 :(得分:2)

您的字段和方法重叠。所以现在你可以这样做:

$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');
}

答案 1 :(得分:0)

如果你致电$transfer->source,你只能获得身份证明。 您还需要加载源

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

然后访问源名称

$nameOfSource = $transfer->source->name