Что Laravel Join с подзапросом

Что Laravel Join с подзапросом

11.08.2017 01:43:41 Просмотров 72 Источник

У меня есть две модели 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 ▶}
  ]
}
У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/45633277/laravel-join-with-sub-query#comment78225556_45633277
Не получая точку первичного (где первичный=true)

Ответы - Что Laravel Join с подзапросом / Laravel join with sub query

Является ответом!
AddWeb Solution Pvt Ltd

11.08.2017 01:59:50

Вы должны попробовать это:

$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
https://stackoverflow.com/questions/45633277/laravel-join-with-sub-query/45633574#comment78226134_45633574
спасибо за ваше время действительно ценю это, primaryполе не будет NULLэто будет либо true, либо false, и я хочу получить адрес, который является primary=ture
https://stackoverflow.com/questions/45633277/laravel-join-with-sub-query/45633574#comment78226159_45633574
@MrRobot Хорошо, дайте мне проверить это
https://stackoverflow.com/questions/45633277/laravel-join-with-sub-query/45633574#comment78226391_45633574
Я установил перечисление для основного поля как (true/false), поэтому я попробовал ваше второе решение, я не получаю никакой ошибки, но я не получаю никаких данных. спасибо
https://stackoverflow.com/questions/45633277/laravel-join-with-sub-query/45633574#comment78226615_45633574
@MrRobot попробуйте с whereHas ('адреса.первичный') может быть работой
https://stackoverflow.com/questions/45633277/laravel-join-with-sub-query/45633574#comment78226645_45633574
@MrRobot не уверен, но хотя бы попробуйте
https://stackoverflow.com/questions/45633277/laravel-join-with-sub-query/45633574#comment78226689_45633574
получаю сообщение об ошибке, Argument 2 passed to Illuminate\Database\Eloquent\Builder::whereHas() must be an instance of Closure, string given, called in D:\Workspace\Project Ideal\idealchicken\app\Http\Controllers\UsersController.php on line 13 and defined
https://stackoverflow.com/questions/45633277/laravel-join-with-sub-query/45633574#comment78226716_45633574
@MrRobot Ой прости оставь это
https://stackoverflow.com/questions/45633277/laravel-join-with-sub-query/45633574#comment78226744_45633574
@MrRobot я думаю, что мы можем ограничить первичный в blade также
https://stackoverflow.com/questions/45633277/laravel-join-with-sub-query/45633574#comment78226959_45633574
как мне это сделать, если это то, что было бы здорово
https://stackoverflow.com/questions/45633277/laravel-join-with-sub-query/45633574#comment78227023_45633574
@MrRobot сначала удалить - > where ('адреса.primary','=', true) из запроса
https://stackoverflow.com/questions/45633277/laravel-join-with-sub-query/45633574#comment78227048_45633574
@MrRobot затем dd ($users) выводит результирующий набор
https://stackoverflow.com/questions/45633277/laravel-join-with-sub-query/45633574#comment78227597_45633574
@MrRobot пожалуйста, проверьте мой обновленный ответ
https://stackoverflow.com/questions/45633277/laravel-join-with-sub-query/45633574#comment78227779_45633574
что ж, это сработало, спасибо, что уделили мне время.
https://stackoverflow.com/questions/45633277/laravel-join-with-sub-query/45633574#comment78227837_45633574
@MrRobot рад помочь и приветствовать в любое время
rchatburn

11.08.2017 02:11:04

Я бы сделал это с помощью красноречивых моделей

Так что вы бы и сделали

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;
    }
https://stackoverflow.com/questions/45633277/laravel-join-with-sub-query/45633791#comment78226587_45633791
спасибо за ваш ответ, попробовал ваше решение я получаю исключение (1/1) ErrorException Trying to get property of non-object
https://stackoverflow.com/questions/45633277/laravel-join-with-sub-query/45633791#comment78226696_45633791
какой объект и как называется ваша адресная модель? если он у вас есть?
https://stackoverflow.com/questions/45633277/laravel-join-with-sub-query/45633791#comment78226892_45633791
мой плохой, это была опечатка, теперь у меня другое Property [primary] does not exist on this collection instance.
https://stackoverflow.com/questions/45633277/laravel-join-with-sub-query/45633791#comment78228076_45633791
вероятно, нужно поставить get () или all () на метод where
Помочь в развитии проекта:
Закрыть X