【问题标题】:Querying a one to one relationship from a collection从集合中查询一对一关系
【发布时间】:2014-01-16 14:45:13
【问题描述】:

问题是我需要从一个集合中提取一个集合。我已经设置了模型和数据库,所以这些关系可以工作:

一个用户可以进行多次协商

一个协商有一个 RiderNegotiation

但是我不能执行这个查询:

$user->negotiations->riderNegotiation

我认为如果我只是通过 $user->negotiation 然后解析协商,我可以在我的视图文件中解决这个问题。我发现我不能以这种方式使用 isEmpty()。

@if($negotiations->riderNegotiation->isEmpty()

在 Laravel 中是否有某种巧妙的技巧来进行这种关系查询?我觉得这是一个普遍的问题。

【问题讨论】:

  • 试试 is_null($negotiations->riderNegotiation)
  • @AyobamiOpeyemi 这将不起作用,因为 $negotiations 是一个集合,并且方法 ->riderNegotiation 将不起作用。如果 $negotiations 是一个模型,它会起作用。必须有一种方法可以从用户那里获取 RiderNegotiations 的集合,因为它们仅由 1 个关系分隔。我只是不知道该怎么做。

标签: laravel laravel-4 eloquent


【解决方案1】:

hasMany 返回一个元素集合,您不能在集合上调用 hasOne。 你应该能够做到:

 $negociations = User::find(1)->negotiations;
 @foreach($negociations as $negociation)
    echo get_class($negociation->riderNegotiation); //riderNegotiation
 @endforeach

【讨论】:

    【解决方案2】:
    $negotiations = User::find(Auth::user()->id)->negotiations;
    
        $temp = array();
    
        foreach($negotiations as $negotiation ) {
    
    
            $temp = array_merge($temp,$negotiaton->riderNegotiation->toArray());
        };
    

    资源有点贵,但 $temp 应该包含该用户的所有骑手协商。

    【讨论】:

    • 这个答案似乎过于复杂而且有点笨拙。 -1
    • 我认为答案在于带有约束的 Eager Loading
    猜你喜欢
    • 2015-12-06
    • 2015-10-30
    • 1970-01-01
    • 2018-03-28
    • 2017-06-23
    • 1970-01-01
    • 2020-10-19
    • 1970-01-01
    • 2019-01-04
    相关资源
    最近更新 更多