Вопрос. Как я могу использовать красноречив, чтобы произвести этот запрос:Laravel: join Eloquent models
ВЫБЕРИТЕ campaigns.name, users.name из кампаний LEFT JOIN пользователей на campaigns.gamemaster_id = users.id где campaigns.status = 1
Кампании
id gamemaster_id name status
1 1 campaign1 1
2 2 campaign2 1
Пользователи
id name
1 rick
2 bob
Результат
id gamemaster_id name status gamemaster_name
1 1 campaign1 1 rick
2 2 campaign2 1 bob
модель кампании
class Campaign extends Model
{
public function gamemaster()
{
return $this->belongsTo('App\User', 'gamemaster_id');
}
}
Моя попытка сделать красноречивый, но это не удается:
$result = Campaign::where('status', '=', 1)->with('gamemaster')->select('name')->orderBy('users.updated_at', 'desc')->get();
Спасибо. Первый, похоже, работает. Но нетерпевая загрузка дает этот запрос: «выберите' id', 'name' из' campaign' где 'status' =?" Возможно, ему не хватает части соединения? – Olof84
Добро пожаловать, вам не нужно присоединяться, он выбирает gamemasters, где они принадлежат к кампаниям, у которых есть статус 1. Таким образом, запускаются два запроса, сначала выбираются кампании, во-вторых, выбираются пользователи, принадлежащие к этим кампаниям. Получил ли он какие-либо ошибки или показал неожиданные результаты? Следует также отметить, что для того, чтобы заказывать кампании с обновленными пользователями атрибутами, вам нужен еще один уровень, поэтому подход соединения проще. – Burak
Когда я запустил его, он говорит следующее: SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец «gamemaster_id» в «списке полей» (SQL: выберите 'id',' gamemaster_id', 'name',' updated_at' from 'sh_users' где' sh_users'''' в (0)). Я префикс мой стол sh, в моем фактическом проекте. – Olof84