Laravel Eloquent Отношения Много-к-одному не работает - PullRequest
0 голосов
/ 12 января 2019

[Laravel 5.7] У меня есть отношение между двумя объектами (Пользователь, Голоса) как отношение «многие к одному», и оно не работает в моем проекте.

Миграция пользователей:

Schema::create('users', function (Blueprint $table) {
   $table->increments('id');
   $table->string('n_name');
   $table->string('n_photo');
   $table->string('n_gender');
});

Миграция голосов:

  Schema::create('voices', function (Blueprint $table) {
     $table->increments('id');
     $table->string('voice');
     $table->integer('n_id')->unsigned();
     $table->foreign('n_id')->references('id')
      ->on('users')->onDelete('cascade');
  });

Пользователи Модель:

class User extends Model
{
   public function voices(){
      return $this->hasMany(Voice::class);
   }
}

Модель Голоса:

class Voice extends Model
{
   public function user(){
      return $this->belongsTo(User::class, 'n_id');
   }
}

И функция «index» в моем контроллере, как показано ниже:

   public function index()
   {
      $user= User::all();
      $voices = $user->voices()::get(); -- error <described below>

      return view('index', compact('user', 'voices'));
   }

когда я хочу получить голоса для каждого пользователя, мне выдается ошибка: «Метод Illuminate \ Database \ Eloquent \ Collection :: voices не существует.»

Мой взгляд выглядит так:

@if($n->voices)
  @foreach($n->voices as $voice)
    <audio controls src="voices/{{$voice->voice}}"></audio><br/>
  @endforeach
@endif

Я надеюсь, что я объяснил проблему очень хорошо, и я жду решения.

Ответы [ 2 ]

0 голосов
/ 12 января 2019

Попробуйте в вашем контроллере:

$users = User::with('voices')->get();

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

0 голосов
/ 12 января 2019

Извините за мое предыдущее сообщение, у меня только что возникла проблема.

Вы не можете получить отношения в СБОРНИКЕ сущностей.

Ваш контроллер должен выглядеть так:

public function index()
{
    $user= User::with('voices')->get();

    return view('index', compact('user'));
}

И ваш клинок должен выглядеть так:

@foreach($users as $user)
    @foreach($user->voices as $voice)
    <audio controls src="voices/{{$voice->voice}}"></audio><br/>
  @endforeach
@endif

Это у вас работает?

...