php 如何调用包含另一个关系的关系- Laravel

wa7juj8i  于 2022-11-28  发布在  PHP
关注(0)|答案(1)|浏览(113)

我试图让一个网站,用户有项目,我试图使一种“活动墙”,以改善每个项目的沟通,所以这个“活动墙”的消息属于项目和消息插入它属于用户了。
因此,我创建了下面的迁移:

Schema::create('messages', function (Blueprint $table) {
            $table->id();
            $table->string('content'); //the message
            $table->string('file'); //if has a file
            $table->integer('user_id')->constrained(); //to make the relationship with the Users table
            $table->integer('projeto_id')->constrained();//to make the relationship with the Projetos (Projectc) table
            $table->timestamps();
        });

在Projeto Model中,我创建了关系
Projeto.php

public function message()
    {
        return $this->hasMany(Message::class);
    }

同向
User.php

public function messages(){
        return $this->hasMany(Message::class);
    }

而这对
Message.php

public function projetos()
    {
        return $this->belongsTo(Projeto::class);
    }

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

但问题是:当我试图获取具有项目关系的消息表时

public function index($id)
    {
        $projeto = Projeto::findOrFail($id);

        $messages = $projeto->message;        
}

我无法获取用户关系以获取邮件的所有者用户名,从而无法返回到我的视图。如何才能更好地实现这一点?

zzwlnbp8

zzwlnbp81#

您应该使用with,以防止n query

public function index($id)
{
    $projeto = Projeto::with('message', 'message.user') // this will get the relation `message`, and `user` from the message
        ->findOrFail($id);
    $messages = $projeto->message;        
}

相关问题