Laravel同一桌子之间的一对多和一对一关系

时间:2017-06-22 13:36:38

标签: laravel relationship

我有2张桌子: 游客, 旅游。 (以及相应的模特游,旅游)。

我已经成功地建立了他们之间的多对多关系。当我

$tour->tourists()->attach($tourist);

它在表Tour_Tourists中创建一条新记录。 (tour_id,tourist_id,created_at,updated_at)。它显示了哪些游客参加了特定的旅行。

现在我需要创建另一个实体:买方。买家是支付旅游费用的游客之一。只有一位游客可以成为买家。

我在两个模型中建立了一对一的关系:

<?php

命名空间App;

课程拓展模型 {     公共功能游客(){

    return $this->belongsToMany('App\Tourist')
    ->withTimestamps();

}

public function buyer() {

    return $this->hasOne('App\Tourist')
    ->withTimestamps();

}

}

(在旅游模型中也一样,除了我将'App \ Tourist'改为'App \ Tour':

public function buyer() {

return $this->hasOne('App\Tour')
->withTimestamps();

但是当我这样做时:

$tour->buyer()->($tourist) 

(其中$ tour和$ tourist包含来自数据库的相应记录),我得到:

BadMethodCallException with message 'Call to undefined method Illuminate\Database\Query\Builder::withTimestamps()'

我觉得我做错了。任何人都可以指出我应该继续前进的方向吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

withTimestamps()是一个用于belongsToMany的方法,因为它更新了数据透视表的created_at / updated_at字段。 hasOne不会有这种方法。