繁体   English   中英

Laravel 加入子查询

[英]Laravel join with sub query

我有两个模型 User 和 Address,一个用户可以有多个地址,但我只想获取哪个是primary(where primary=true)

这是我尝试过的,并且我在列表中获得了多个用户

$users = User::join('addresses', 'addresses.user_id', 'users.id')
             ->select('name','phone_number','address','landmark','city','state','pincode','users.status')
             ->get();

我也试过这个,但我没有得到任何数据

$users = User::join('addresses', 'addresses.user_id', 'users.id')
             ->where('addresses.primary', true)
             ->select('name','phone_number','address','landmark','city','state','pincode','users.status')
             ->get();

谢谢

Collection {#375 ▼
  #items: array:8 [▼
    0 => User {#376 ▶}
    1 => User {#377 ▼
      #attributes: array:9 [▼
        "name" => "Colin Sushanth"
        "phone_number" => "9987217545"
        "address" => "2nd Cross 3rd street, y this is my address"
        "landmark" => "Near the address"
        "city" => "Mangalore"
        "state" => "Karnataka"
        "pincode" => 575002
        "status" => "valid"
        "primary" => "true"
      ]
    }
    2 => User {#378 ▶}
  ]
}

你应该试试这个:

$users = User::join('addresses', 'addresses.user_id', 'users.id')
             ->where('addresses.primary','=',1)
             ->select('name','phone_number','address','landmark','city','state','pincode','users.status')
             ->get();

或者:

$users = User::join('addresses', 'addresses.user_id', 'users.id')
                 ->where('addresses.primary','=',true)
                 ->select('name','phone_number','address','landmark','city','state','pincode','users.status')
                 ->get();

更新答案

刀片文件:

@if(isset($users))

  @foreach($users as $user)

    @if($user->primary === 'true')

        //Your code

    @endif

  @endforeach

@endif

我会使用雄辩的模型来做到这一点

所以你会做吗

User::whereHas('primary')->pluck('name','phone_number','address','landmark','city','state','pincode','users.status')

你的模型看起来像这样

 public function addresses()
    {
        return $this->belongsTo('App\Models\Address');
    }

    public function primary()
    {
        return $this->addresses->primary == true;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM