了解雄辩的一对多关系

时间:2020-06-01 21:03:03

标签: laravel eloquent laravel-7 eloquent-relationship

我正在尝试理解雄辩的关系,但似乎我在理解它上缺少一些东西。我有:

  • 一个PurchaseView产生许多Meeting
  • 可以为一个Documents生成特定的Document

因此一对多关系。我试图在Meeting详细信息表中显示'meeting_name',但出现此错误:

试图获取非对象的属性“会议名称”(视图:C:\ wamp64 \ www \ yajra_contact_system \ resources \ views \ documents \ index.blade.php)

这是我的代码。

请通过代码解决方案进行解释:

app \ Document.php文件:

Document

app \ Meeting.php文件:

namespace App;

use Illuminate\Database\Eloquent\Model;

class Document extends Model
{
    protected $fillable = [
        'document_name',
        'document_desc',
    ];

    public function meeting(){
        return $this->belongsTo(Meeting::class);
    }
}

app \ Http \ Controllers \ DocumentsController.php文件:

namespace App;

use Illuminate\Database\Eloquent\Model;

class Meeting extends Model
{
    protected $fillable = [
        'document_id',
        'meeting_name',
        'meeting_desc',
        'room_no',
        'no_of_invitees',
        'comments'
    ];

    public function documents(){
        return $this->hasMany(Document::class);
    }
}

资源\视图\文档\ index.blade.php文件:

namespace App\Http\Controllers;

use App\Document;
use App\Meeting;
use Illuminate\Http\Request;

class DocumentsController extends Controller
{
    public function index()
    {
        $documents =  Document::all();
        $meetings = Meeting::all();        

        return view('documents.index', compact('documents', 'meetings'));
    }
}

2 个答案:

答案 0 :(得分:2)

您的代码有很多问题:

首先:要使用该关系...,您必须先加载它...

通过使用with('relationName')方法完成的加载关系...

索引:

$documents =  Document::with('meeting')->all();

秒:

 <td>{{$document->meetings->meeting_name}}</td> <!-- ERROR IS HERE -->

该关系被命名为不带s ..而不是会议....

第三名:

提供有关外键的有害生物实践

在会议模型中

  public function documents(){
        return $this->hasMany(Document::class,'meeting_id');
    }

在文档模型中:

 public function meeting(){
        return $this->belongsTo(Meeting::class,'meeting_id');
    }

请确保您在文档表中有一个Meeting_id列,作为会议表中ID的外键被引用

有关加载关系的更多详细信息:

https://laravel.com/docs/7.x/eloquent-relationships#eager-loading

答案 1 :(得分:1)

所以您将表弄混了。

每个会议有一个记录,但是在会议表中有一个document_id,您需要为每个文件复制会议记录。

从会议表中删除document_id

在文件表中添加一个Meeting_id

请记住要更新模型的易错数组,否则您将不会在集合中获得新的列。

这将解决您的问题,因为您的关系正确。