【问题标题】:Laravel - Trying to get data via One To Many RelationshipLaravel - 尝试通过一对多关系获取数据
【发布时间】:2020-12-30 22:51:01
【问题描述】:

我已经有一段时间没有使用 Laravel 了,现在我正试图回来,从事一个项目,但我对通过一对多关系检索数据感到很困惑。

在用户模型中:

public function blackboard()
{
    return $this->hasMany(Blackboard::class);
}

在黑板模型中:

public function user()
{
    return $this->belongsTo(User::class);
}

在控制器中:

public function index()
{
    $blackboard = Blackboard::all();
        
    return view('home', ['blackboards' => $blackboard]);
}

在视图中:

<ul class="list-group">
    @foreach($blackboards as $blackboard)
       <li>{{ $blackboard->user->name }}</li>
    @endforeach
</ul>

在黑板迁移中:

Schema::create('blackboards', function (Blueprint $table)
{
    $table->bigIncrements('id');
    $table->text('title')->nullable(); //Need to take out
    $table->text('content')->nullable(); //Need to take out
    $table->unsignedBigInteger('created_by'); 
    $table->timestamps();

    $table->foreign('created_by')
        ->references('id')
        ->on('users')
        ->onDelete('cascade');
});

在用户迁移中

Schema::create('users', function (Blueprint $table)
{
    $table->bigIncrements('id');
    $table->string('name');
    $table->string('email')->unique();
    $table->timestamp('email_verified_at')->nullable();
    $table->string('password');
    $table->rememberToken();
    $table->timestamps();
});

不知何故,它不允许我通过黑板数据显示用户信息,我收到以下错误:

Trying to get property 'name' of non-object (View: /var/www/html/intranet/resources/views/home.blade.php)

【问题讨论】:

    标签: database laravel eloquent relationship


    【解决方案1】:

    你的内心Blackboard模特:

    public function user()
    {
        return $this->belongsTo(User::class, 'created_by', 'id');
    }
    

    如果您也希望反向关系起作用,请在 User 模式内:

    public function blackboard()
    {
        return $this->hasMany(Blackboard::class, 'created_by', 'id');
    }
    
    

    在到达视图之前不要忘记在 Controller 中加载用户,这将提高性能:

    public function index()
    {
        $blackboard = Blackboard::with(['user'])->get();
            
        return view('home', ['blackboards' => $blackboard]);
    }
    

    【讨论】:

    • 干杯伙伴,感谢快速帮助:D 现在完美无缺
    【解决方案2】:

    我认为您所要做的就是提供外键名称,只有遵循 laravel 约定(如果您将其命名为 user_id),您可以省略它:

    在用户模型中:

    public function blackboard(){
            return $this->hasMany(Blackboard::class,'created_by');
        }
    

    在黑板模型中:

    public function user(){
            return $this->belongsTo(User::class,'created_by');
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-05
      • 1970-01-01
      • 2021-06-09
      • 2018-12-29
      • 2017-07-16
      • 2019-07-17
      • 2018-08-02
      相关资源
      最近更新 更多