Laravel hasManyThrough

j'ai du mal à me faire à l'idée d'un concept hasmanygrough avec laravel. J'ai trois tables:

Bookings
    -id (int)
    -some other fields

Meta
    -id (int)
    -booking_id (int)
    -metatype_id (int)
    -some other fields

MetaType
    -id (int)
    -name (string)
    -some other fields

ce que j'essaie d'obtenir est un modèle éloquent qui me permet d'avoir un enregistrement de réservation unique avec plusieurs méta-enregistrements de type MetaType. J'ai pensé que hasManyThrough aurait pu résoudre cela, mais maintenant je pense que ce n'est peut-être pas la meilleure façon.

dans mon modèle de réservation j'ai

public function bookingmeta() {
    return $this->hasMany('bookingmeta','booking_id');
}

public function bookingmetatype() {
    return $this->hasManyThrough('bookingmetatype','bookingmeta','booking_id','bookingmetatype_id');
}

mais cela ne génère pas le bon SQL et échoue. J'obtiens

select `new_bookingmetatype`.*, `new_bookingmeta`.`booking_id` 
from `new_bookingmetatype` 
inner join `new_bookingmeta` 
on `new_bookingmeta`.`bookingmetatype_id` = `new_bookingmetatype`.`id` 
where `new_bookingmeta`.`booking_id` in (57103)

alors que ce que j'essaie vraiment d'accomplir c'est

select `new_bookingmetatype`.*, `new_bookingmeta`.`booking_id` 
from `new_bookingmetatype` 
inner join `new_bookingmeta` 
on `new_bookingmeta`.`id` = `new_bookingmetatype`.`bookingmetatype_id`  
where `new_bookingmeta`.`booking_id` in (57103)

si quelqu'un peut m'indiquer la bonne direction, j'apprécierais vraiment. Grâce.

9
demandé sur Kjaal 2014-07-28 15:51:44

1 réponses

hasManyThrough n'est pas la voie à tous. Cela ne fonctionne que pour des relations comme celle-ci:

A hasMany/hasOne B, B hasMany/hasOne C, then A hasManyThrough C (through B)

ce que vous avez ici est beaucoup à beaucoup (belongsToMany),