Laravel 雄辩的关系多对一不起作用

Posted

技术标签:

【中文标题】Laravel 雄辩的关系多对一不起作用【英文标题】:Laravel Eloquent Relationship Many-to-one is not working 【发布时间】:2019-06-07 07:28:00 【问题描述】:

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

我的控制器中的“索引”功能如下:

   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

我希望我已经很好地解释了这个问题,我正在等待解决方案。

【问题讨论】:

【参考方案1】:

抱歉我之前的消息,我刚刚收到了您遇到的问题。

您无法获取实体集合上的关系。

您的控制器应如下所示:

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

它对你有用吗?

【讨论】:

@HassanInter 抱歉,修改了我的答案。 它给了我另一个错误..说:这个集合实例上不存在属性 [voices]。 再次修订,请注意您有一个用户集合而不是 1 个用户,因此您必须迭代每个用户,然后像上面的示例一样迭代每个语音。跨度> 【参考方案2】:

在您的控制器中尝试:

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

我就是这样使用它的,它对我来说很好用。

【讨论】:

以上是关于Laravel 雄辩的关系多对一不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 7雄辩的关系不起作用

Laravel 雄辩的关系在我的情况下不起作用[重复]

Laravel 多对多关系不起作用

Laravel Nova 多态多对多关系不起作用

Laravel 8 多对多关系不起作用(没有抛出错误)

博客上的 Laravel 5.1 多对多标签不起作用