Представление не возвращает атрибуты, хранящиеся в базе данных

Представление не возвращает атрибуты, хранящиеся в базе данных

16.11.2019 08:38:34 Просмотров 73 Источник

Я пытаюсь вернуть, какой пользователь опубликовал комментарий, а также время, когда они опубликовали комментарий.

У меня есть модель для комментариев

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

Kenny Horna

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'));
}

Проверьте этот раздел документации.

Является ответом!
albus_severus

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

Затем вы можете получить доступ ко всем данным таблицы комментариев с пользователем

https://stackoverflow.com/questions/58893444/view-is-not-returning-attributes-stored-in-database/58893596#comment104052220_58893596
Ах, спасибо! Есть ли шанс, что вы сможете помочь мне с синтаксисом для вытаскивания автора комментария? Спасибо снова
https://stackoverflow.com/questions/58893444/view-is-not-returning-attributes-stored-in-database/58893596#comment104052237_58893596
подпевала.во-первых, дать свои комментарии таблицы
https://stackoverflow.com/questions/58893444/view-is-not-returning-attributes-stored-in-database/58893596#comment104052756_58893596
А вот и миграция! $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('produc‌​ts');
https://stackoverflow.com/questions/58893444/view-is-not-returning-attributes-stored-in-database/58893596#comment104053092_58893596
я отредактировал свой ответ
https://stackoverflow.com/questions/58893444/view-is-not-returning-attributes-stored-in-database/58893596#comment104053357_58893596
Здравствуйте еще раз, спасибо за вашу помощь до сих пор. Используя приведенный выше код, я получаю ошибку BadMethodCallExceptionCall to undefined method Illuminate\Database\Query\Builder::all()он выделяет $comments=comments::with('user')->all();(я изменил его с Commentна comments, чтобы отразить имя моего класса комментариев)
https://stackoverflow.com/questions/58893444/view-is-not-returning-attributes-stored-in-database/58893596#comment104053437_58893596
Nevermind @albus_severus мне удалось заставить его работать, очистив мой кэш. Большое спасибо за вашу помощь!
https://stackoverflow.com/questions/58893444/view-is-not-returning-attributes-stored-in-database/58893596#comment104053575_58893596
хорошая работа мой друг
Закрыть X