Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Хочу получить все записи из таблица 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
Не в сети
поизучал документацию, оказывается связанные данные можно вытащить конструктором запросов:
$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();
Не в сети
достаточно Posts::with('user')->get()
но сразу еще 2 замечания:
- модели именуем в единственном числе
- так как отношение user один ко многим, то именуем users
Не в сети
Добрый день.
Подскажите пожалуйста, а можно к связанной таблице прикрутить фильтр.
То есть "получить все записи из таблицы posts, которая связана по внешнему ключу с таблицей users", но только с теми users у которых поле approved = 1, без конструктора запросов.
У меня не сработало.
Posts::with('user')->whereHas('user', function ($query) {
$query->where('approved', '=', 1);
})->get();
Спасибо.
Изменено DDave (04.10.2021 22:05:36)
Не в сети
Страницы 1