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

Источник

Не получая точку первичного (где первичный=true)
Источник

Источник
Ответы - Что Laravel Join с подзапросом / Laravel join with sub query
Является ответом!

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

спасибо за ваше время действительно ценю это,
primary
поле не будет NULL
это будет либо true
, либо false
, и я хочу получить адрес, который является primary=ture

@MrRobot Хорошо, дайте мне проверить это

Я установил перечисление для основного поля как
(true/false)
, поэтому я попробовал ваше второе решение, я не получаю никакой ошибки, но я не получаю никаких данных. спасибо

@MrRobot попробуйте с whereHas ('адреса.первичный') может быть работой

@MrRobot не уверен, но хотя бы попробуйте

получаю сообщение об ошибке,
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

@MrRobot Ой прости оставь это

@MrRobot я думаю, что мы можем ограничить первичный в blade также

как мне это сделать, если это то, что было бы здорово

@MrRobot сначала удалить - > where ('адреса.primary','=', true) из запроса

@MrRobot затем dd ($users) выводит результирующий набор

@MrRobot пожалуйста, проверьте мой обновленный ответ

что ж, это сработало, спасибо, что уделили мне время.

@MrRobot рад помочь и приветствовать в любое время

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;
}

спасибо за ваш ответ, попробовал ваше решение я получаю исключение
(1/1) ErrorException Trying to get property of non-object

какой объект и как называется ваша адресная модель? если он у вас есть?

мой плохой, это была опечатка, теперь у меня другое
Property [primary] does not exist on this collection instance.

вероятно, нужно поставить get () или all () на метод where
Помочь в развитии проекта: