2016-05-13 3 views
0

Ich habe eine Beziehung von eins zu vielen funktioniert nicht auf einer Seite.Beziehung eins zu viele funktioniert nur auf einer Seite

Meine Tabellen

`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 
) 

Modelle: 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'); 
} 

i TipoSeguroCarro::find(x)->seguros tun können, aber nicht die andere Seite wie SeguroCarro::find(x)->tipoSeguro

und ich kann nicht verstehen, warum das passiert. jemand?

dank

Antwort

0

Sie tipo_seguro Attribut statt id_tipo_seguro passieren sollte, weil Ihre Fremdschlüssel tipo_seguro in beiden Beziehungen ist.

Eine Erklärung wegen Anfrage:

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)

Beide belongsTo und hasMany akzeptieren zweiten Parameter als Fremdschlüssel. Sie haben also zwei Felder - erstens Ihren Primärschlüssel (id_tipo_seguro) und zweitens den Fremdschlüssel (tipo_seguro). Wie bereits erwähnt, akzeptieren beide Methoden Fremdschlüssel als zweiten Parameter.

+0

aber in meiner Tabelle tipo_seguro_carro ist id_tipo_seguro der Primärschlüssel .. Warum überlasse ich die tipo_seguro in beiden Beziehungen? ich habe mehr eins zu viele, wie Benutzer haben ein oder mehrere SeguroCarro und in den Beziehungen sage ich 'hasMany ('App \ SeguroCarro', 'cliente');' und 'gehört zu ('App \ Cliente', 'id_cliente') ; ' – syszen

+0

es funktioniert, aber können Sie pls erklären? – syszen

+0

@syszen Ich habe meine Antwort aktualisiert, schau sie dir an. Wenn etwas noch unklar aussieht, schreibe es. –

Verwandte Themen