0

我正在努力解决一对多的关系和雄辩的问题。我有活动(如演出活动),我有地点。每个活动都与一个地点相关联,但每个地点可能会用于举办许多活动。(一)位置到(许多)事件。

这是我的模型:

class Iaevent extends Eloquent {
  public static $timestamps = true;
  public function locations() {
    return $this->has_one('Location');
  }
}

class Location extends Eloquent {
  public static $timestamps = true;
  public function iaevents() {
    return $this->has_many('Iaevent');
  }
}

如果我尝试回显:

echo $iaevent->locations()->first()->company;
//or
Iaevent::find(1)->locations()->first()->company;

我得到错误:

Unknown column 'iaevent_id' in 'where clause'
SQL: SELECT * FROM `locations` WHERE `iaevent_id` = ? LIMIT 1

现在...“iaevent_id”不在位置表中。相反,我将“location_id”放在“ievents”表中,因为一个位置可以应用于许多事件,但绝不会反过来。我在这里做错了什么?

在 Laravel 论坛上,有人建议在我的 Iaevent 模型中将 'has_one' 替换为 'belongs_to'。当我这样做时,我得到一个错误Trying to get property of non-object

以另一种方式测试关系,echo Location::find(1)->iaevents()->first()->name;效果很好。

4

3 回答 3

1

该事件属于该位置。

public function location()
{
    return $this->belongs_to( 'Location' );
}

$location = $event->location()->first();

if ( $location )
    $location->name;

“有一个”关系用于一对一关系。假设事件有一个 location_id,但您只希望这是一对一而不是一对多。在这种情况下,该位置有一个事件,并且该事件属于一个位置。

于 2013-03-28T15:08:08.363 回答
0

has one 工作正常,因为它只返回一个外来元素,但是 has_many 函数返回一个数组,所以你必须像数组一样索引它,正确的使用方法是

iaevent::find(1)->位置[0]->公司;

于 2013-04-28T21:27:19.773 回答
0

我必须指定“外表”键,例如:

return $this->has_one('Location', 'id');
于 2019-11-21T17:27:02.150 回答