Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 23.09.2021 17:40:35

Вывод связанных данных

Хочу получить все записи из таблица posts, которая связана по внешнему ключу с таблицей users, но получаю ошибку "Неопределенное свойство $user
Модель User

class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable;

   // 

    public function about()
    {
        return $this->belongsTo(Posts::class);
    }
}

Модель Posts

class Posts extends Model
{
    use HasFactory;


    public function user()
    {
        return $this->hasMany(User::class);
    }
}

PostController

public function index()
    {
        $postList = DB::table('posts')->join('users', 'posts.user_id', '=', 'users.id')->get();
        return view('admin.post.index', compact('postList'));
    }

View

@foreach($postList as $item)
<tr>
     <td>{{ $item->id }}</td>
     <td>{{ $item->title }}</td>
     <td>{{ $item->text }}</td>
     <td>{{ $item->user->login }}</td>
     <td>{{ $item->created_at }}</td>
     </tr>
@endforeach

Не в сети

#2 23.09.2021 19:27:08

Re: Вывод связанных данных

поизучал документацию, оказывается связанные данные можно вытащить конструктором запросов:

$postList = DB::table('posts')->select('posts.id', 'posts.title', 'posts.text', 'users.login as username', 'posts.created_at')
            ->join('users', 'posts.user_id', '=', 'users.id')->get();

Не в сети

#3 24.09.2021 15:47:11

Re: Вывод связанных данных

достаточно Posts::with('user')->get()
но сразу еще 2 замечания:
- модели именуем в единственном числе
- так как отношение user один ко многим, то именуем users

Не в сети

#4 04.10.2021 21:57:39

Re: Вывод связанных данных

Добрый день. 

Подскажите пожалуйста, а можно к связанной таблице прикрутить фильтр.
То есть  "получить все записи из таблицы posts, которая связана по внешнему ключу с таблицей users", но только с теми users у которых поле approved = 1, без конструктора запросов.

У меня не сработало.

Posts::with('user')->whereHas('user', function ($query) {
    $query->where('approved', '=', 1);
})->get();

Спасибо.

Изменено DDave (04.10.2021 22:05:36)

Не в сети

Подвал раздела