2016-05-13 10 views
0

私は1対多の関係を片面ではしません。関係1対多多くの片方しか働かない

私のテーブル

`seguro_carro` (
    `id_seguro` INT NOT NULL AUTO_INCREMENT, 
    `matricula` VARCHAR(8) NOT NULL, 
    `validade` DATE NOT NULL, 
    `preco` DECIMAL(12,3) NOT NULL, 
    `tipo_seguro` INT NOT NULL, 
    `cliente` INT NOT NULL 
) 

`tipo_seguro_carro` (
    `id_tipo_seguro` INT NOT NULL AUTO_INCREMENT, 
    `descricao` VARCHAR(50) NOT NULL 
) 

モデル: SeguroCarro.php

public function tipoSeguro() 
{ 
    return $this->belongsTo('App\TipoSeguroCarro', 'id_tipo_seguro'); 
} 

TipoSeguroCarro.php

public function seguros() 
{ 
    return $this->hasMany('App\SeguroCarro','tipo_seguro'); 
} 

私はTipoSeguroCarro::find(x)->segurosを行うことができますではなく、他の側面などのSeguroCarro::find(x)->tipoSeguro

と私はなぜこれが起こっているのか理解できません.. 誰か?

おかげ

答えて

0

あなたの外部キーは、両方の関係でtipo_seguroあるので、あなたは、代わりにid_tipo_segurotipo_seguro属性を渡す必要があります。

による要求にいくつかの説明:

https://laravel.com/api/5.2/Illuminate/Database/Eloquent/Model.html#method_belongsTo
BelongsTo belongsTo(string $related, string $foreignKey = null, string $otherKey = null, string $relation = null)

https://laravel.com/api/5.2/Illuminate/Database/Eloquent/Model.html#method_hasMany
HasMany hasMany(string $related, string $foreignKey = null, string $localKey = null)

両方belongsTohasMany外部キーとして二番目のパラメータを受け付けます。基本的には、2つのフィールドがあります。最初はプライマリキー(id_tipo_seguro)、もう1つは外部キー(tipo_seguro)です。前述のように、両方のメソッドは第2のパラメータとして外部キーを受け入れます。

+0

私のテーブルのtipo_seguro_carroはid_tipo_seguroプライマリキーです。 なぜ私は両方の関係でtipo_seguroを渡しますか?私は 'hasMany( 'App \ SeguroCarro'、 'cliente');と' belongsTo( 'App \ Cliente'、 'id_cliente')という関係で、1つ以上のSeguroCarroを持っているように、 ; ' – syszen

+0

それは動作しますが、plsを説明できますか? – syszen

+0

@syszen私は自分の答えを更新しました。まだ何かが不明瞭な場合は、それを書いてください。 –