0

1 対多の関係と Eloquent に苦労しています。イベント (ショー イベントのように) があり、場所があります。各イベントは 1 つの場所に関連付けられていますが、各場所は多くのイベントをホストするために使用される場合があります。(1)場所から(多数)イベントへ。

ここに私のモデルがあります:

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」は場所テーブルにありません。むしろ、1 つの場所が多くのイベントに適用される可能性があるため、「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;

「has one」関係は、1 対 1 の関係に使用されます。イベントに location_id があるとしますが、これを 1 対多ではなく 1 対 1 にしたいとします。その場合、場所には 1 つのイベントがあり、イベントは場所に属します。

于 2013-03-28T15:08:08.363 に答える
0

has_many 関数は外部要素を 1 つしか返さないため正しく機能しますが、has_many 関数は配列を返すため、配列のようにインデックスを付ける必要があります。正しい使用方法は次のようになります。

Iaevent::find(1)->場所[0]->会社;

于 2013-04-28T21:27:19.773 に答える