首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多对一桌,关系用拉拉

问多对一桌,关系用拉拉
EN

Stack Overflow用户
提问于 2014-12-04 14:24:16
回答 2查看 2.6K关注 0票数 0

我有模特名叫“杂志”。这个模型代表杂志表。

代码语言:javascript
复制
magazines
--id
--name

我也有模型,名叫Transfer。此模型表示传输表。在这个表中,我想要存储有关产品转移的信息。

代码语言:javascript
复制
transfers
--id
--source
--target

有两个重要的栏目,来源是从我得到产品的杂志id,目标是我放置产品的杂志id。

我应该如何在雄辩的模型中建立关系?我做了这样的事

代码语言:javascript
复制
public function source()
{
    return $this->belongsTo('Magazine', 'source');
}

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

但是,不管用。如果我调用$transfer->source,我只得到id,它存储在这个列中(整数值)。但我想得到杂志的对象。如果我将方法名从source()更改为(),那么雄辩将返回Magazine对象,这是正确的。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-04 15:49:46

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

代码语言:javascript
复制
$transfer->source()->getResult()->name;

但很明显,这不是处理人际关系的方法。

尽管如此,为了使它按预期工作,重新命名了方法或表字段。我建议这样做:

代码语言:javascript
复制
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');
}
票数 3
EN

Stack Overflow用户

发布于 2014-12-04 15:45:20

如果您调用$transfer->source,您只会得到id。您也需要加载您的源。

代码语言:javascript
复制
$transfer = Transfer::with('source')->find(123);

然后访问源的名称。

代码语言:javascript
复制
$nameOfSource = $transfer->source->name
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27296428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档