Представление не возвращает атрибуты, хранящиеся в базе данных
Я пытаюсь вернуть, какой пользователь опубликовал комментарий, а также время, когда они опубликовали комментарий.
У меня есть модель для комментариев
use Illuminate\Database\Eloquent\Model;
class comments extends Model
{
protected $guarded = [];
public function adjustments()
{
return $this->belongsToMany(User::class, 'adjustments')
->withTimestamps();
}
}
Сводная таблица, которая отслеживает, какие пользователи разместили какие комментарии
public function up()
{
Schema::create('adjustments', function (Blueprint $table) {
$table->increments('id');
$table->unsignedInteger('user_id')->index();
$table->unsignedInteger('comments_id')->index();
$table->timestamps();
});
}
Пустая модель корректировки
use Illuminate\Database\Eloquent\Model;
class adjustment extends Model
{
//
}
В php artisan tinker
когда $comment = App\comment::first();
и $user = App\user::first();
я в состоянии успешно вложить функция user_id в comment_id, используя $comment->adjustments()->attach($user->id)
и вызов App\adjustments::all();
будет правильно вернуть
=> Illuminate\Database\Eloquent\Collection {#2935 all: [ App\adjustment {#2941 id: 1, user_id: 1, comments_id: 1, created_at: "2019-11-16 17:05:10", updated_at: "2019-11-16 17:05:10", }, ], }
Когда я пытаюсь показать корректировки в моем представлении, я получаю пустой список.
@foreach ($comment->adjustments as $user)
<li>{{$user->name}} on {{$user->pivot->updated_at}}</li>
@endforeach
В моем контроллере продуктов (пользователь комментирует продукты) у меня есть следующий код в моей функции show
public function show(products $product, comments $comment, User $user)
{
return view ('products.show', compact('product'), compact('comment'));
}

Ответы - Представление не возвращает атрибуты, хранящиеся в базе данных / View is not returning attributes stored in database

16.11.2019 08:48:10
Прежде всего , я предлагаю вам следовать соглашениям об именах Laravel, в вашем случае назовите свою модель в единственном числе и используя случай Pascal .
Попробуйте загрузить отношения:
public function show(products $product, comments $comment, User $user)
{
$comment->loadMissing('adjustments'); // <---
return view ('products.show', compact('product'), compact('comment'));
}
Проверьте этот раздел документации.

16.11.2019 08:54:20
Здесь вам не нужна сводная таблица. Потому что здесь у вас есть одно ко многим отношение. Пользователь может создать много комментариев. & один комментарий принадлежит одному user.In модель пользователя добавьте это
public function comments()
{
return $this->hasMany(Comment::class);
}
& комментарии таблица u имеет внешний ключ user_id.
в модели комментариев
public function user()
{
return $this->belongsTo(User::class,'user_id','id')
}
public function show(products $product, comments $comment, User $user)
{
$comments=Comment::with('user')->all();
return view ('products.show', compact(['product','comments']));
}
@foreach ($comments as $comment)
<li>{{$comment->user->name}} on {{$comment->updated_at}}</li>
@endforeach
Затем вы можете получить доступ ко всем данным таблицы комментариев с пользователем



$table->increments('id');
$table->unsignedInteger('user_id');
$table->unsignedInteger('products_id');
$table->text('comment');
$table->timestamps();
$table->foreign('user_id')->references('id')->on('users');
$table->foreign('products_id')->references('id')->on('products');


BadMethodCallException
Call to undefined method Illuminate\Database\Query\Builder::all()
он выделяет $comments=comments::with('user')->all();
(я изменил его с Comment
на comments
, чтобы отразить имя моего класса комментариев)

