Laravel получает значение из другой таблицы, используя красноречивыйPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Laravel получает значение из другой таблицы, используя красноречивый

Сообщение Anonymous »

У меня есть такие таблицы:
Пользовательская таблица:

Код: Выделить всё

+----+---------+------------+
| id |  name   |    level   |
+----+---------+------------+
|  1 |  user 1 |     1      |
|  2 |  user 2 |     2      |
+----+---------+------------+
Таблица категорий:

Код: Выделить всё

+----+---------+------------+
| id | user_id |    name    |
+----+---------+------------+
|  1 |       1 | category 1 |
|  2 |       2 | category 2 |
|  3 |       2 | category 3 |
+----+---------+------------+
Таблица товаров:

Код: Выделить всё

+----+-------------+------------+
| id | category_id |    name    |
+----+-------------+------------+
|  1 |       1     | product 1  |
|  2 |       2     | product 2  |
|  3 |       3     | product 3  |
|  4 |       3     | product 4  |
+----+-------------+------------+
Я хочу получить весь продукт с user_id = 2 через eloquent, и я получил это с помощью кода ниже:

Код: Выделить всё

$id = 2;
$data = product::whereHas('category',  function ($q) use ($id) {
$q->where('user_id', $id);
})->get();
Но когда я хочу напечатать имя категории и имя пользователя через $data, это не работает, мой код выглядит следующим образом:

Код: Выделить всё

$data->first()->category->name;
$data->first()->user->name;
Я могу просто решить этот вопрос с помощью обычного построения запроса с помощью JOIN, просто соединить 3 таблицы вместе и выбрать нужные столбцы, и все готово, но я хочу решить его с помощью eloquent, я я понятия не имею, как заставить это работать.
И у меня есть еще один вопрос: у меня есть такой код построителя запросов:

Код: Выделить всё

    $id = false;
if(auth()->user()->level != 1){
$id = auth()->user()->id;
}
$data = DB::table('product')
->select('product.*', 'category.name AS category_name', 'users.name AS user_name')
->join('category', 'category.id', '=', 'product.category_id')
->join('users', 'users.id', '=', 'category.user_id')
->when($id, function($query, $id){
return $query->where('users.id', $id);
})
->get();
Идея этого кода заключается в том, что когда уровень пользователя = 1, я получу все продукты, но когда уровень пользователя != 1, я получу все продукты с идентификатором пользователя = $. id, вопрос в следующем: как мне преобразовать это в красноречивое? Я получил ответ для себя, но думаю, что он недостаточно хорош.
Спасибо.

Подробнее здесь: https://stackoverflow.com/questions/706 ... g-eloquent
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»