【问题标题】:Three way (model) relationship三路(模型)关系
【发布时间】:2013-03-25 09:02:34
【问题描述】:

我有以下Schema and Model 设置,还有这个seed data

我的目标是实现三向关系,这可能是一个错误的术语,但最后,这就是我所说的。

三通如:

  • 支票附有代币
  • 附加的令牌具有附加值,这些值知道支票->令牌附件。

问题在于从TokenValue 的关系,其中,当我加载Values 时,他们没有考虑关联的Cheque,因此返回了属于Token 的所有值.

我不知道Value Schema 对于这种三向关系是否正确,因此,我也怀疑属于ChequeTokenValue 模型关系是否正确。

这就是我当前请求模型的方式(摘自设置):

Route::get('test', function()
{
    $cheque = Cheq_Node::with(array('tokens' => function($query) {
        $query->where_sortable(1);
    }, 'tokens.values'))->first();

    dd( $cheques );
});

我已尝试将 Token 值参考更改为:

public function values()
{
    return $this->has_many('Cheq_Value', 'token_id')->where_node_id($this->pivot->id);
}

但这产生了我:

Trying to get property of non-object

在返回前添加Log::dump( dump($this) ),显示没有加载模型,只是一个空的 Eloquent 模型:

object(Cheq_Token)[63]
  public 'attributes' => 
    array (size=0)
      empty
  public 'original' => 
    array (size=0)
      empty
  public 'relationships' => 
    array (size=0)
      empty
  public 'exists' => boolean false
  public 'includes' => 
    array (size=1)
      'values' => null

难怪那里会产生错误。

如何实现这种三向关系?

【问题讨论】:

    标签: php foreign-keys relationship laravel eloquent


    【解决方案1】:

    我认为您需要检查您的数据库架构,使用适当的外键来检索正确的数据。假设你会得到你想要的结果,并不总是最好的方法。

    在你的数据库中使用连接就可以了……

    【讨论】:

      【解决方案2】:

      我最终选择了不同的Schema 和不同的Models

      那也需要采用不同的路径进行插入,导致如下test seed

      全部检索:

      $nodes = Node::with(array('tokenlinks', 'tokenlinks.token', 'tokenlinks.values'))->get();
      

      【讨论】:

        猜你喜欢
        • 2018-02-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-01
        • 2021-11-18
        相关资源
        最近更新 更多