Jump to content
php.lv forumi

Laravel relations, query builder


Alnis

Recommended Posts

Ir tabulas:

1.       goods (id, name, category_id);

2.       categories (id, name)

3.       field_binding (id, category_id, field_id)

4.       fields (id, name)

5.       field_values (id, field_id, good_id)

 

Man ir sekojoši relations:

Class Good extends Eloquent{
                public function category(){
                                return $this->belongsTo(‘category’);
                }
                public function fieldValues(){
                                return $this->hasMany(‘FieldValues’)
                }
}
Class Category extends Eloquent{
                public function fields(){
                                return $this->belongsToMany(‘Fields’, ‘field_binding’, ‘category_id’, field_id);
                }
}
Class Field extends Eloquent{
                public function fieldValues(){
                                return $this->hasMany(‘FieldValues’, ‘field_id’);
                }
}
Class FieldValues extends Eloquent{
                public function fieldValues(){
                                return $this->belongsTo(‘good’);
                }
}

Pielotojums:

1.

return Good::with(‘category.fields.fieldValues’)->get();

te atgriež sarakstu, kur parādās arī tādas fieldValues, kuras nav saistītas ar good.

 

2. 

return Good::with(‘fieldValues’)->get();

Te atgriež sarakstu ar visām field values, bet man nevajag visas, man vajag tikai to fieldu, kuri ir piesiastīti kategorijai, kas piesaistīta goods, values

 

3. 

return Good::with(array(‘category.fields.fieldValues’=>function($query){
                $query->where(‘goods.id’,’=’,’fieldValues.id’)
}))->get();

Bet šis fragments, protams, nestrādā: 

‘goods.id’,’=’,’fieldValues.id’.

Tātad man vajag izvadīt tos fieldu values, kas attiecās uz konkrēto good un kuru fieldi ir piesaistīti konkrētajai Category, kas piesaistīta goods.  Idejas? Paldies!

 

p.s. pa vidu iespējams ir sintakses kļudas, bet tam šobrīd nav nozīmes.

Edited by Alnis
Link to comment
Share on other sites

Kemito,

 

drukas kļuda bija ieviesusies, biju domājis:

$query->where(‘goods.id’,’=’,’fieldValues.id’)

Goods tabula man ir pati pirmā, kurai pašā sākumā es lieku klāt relācijas (relāciju ķēdi). Jā, man bija doma tajā where kaut kā uzrādīt tabulas 'goods' nosaukumu, kas acīmredzot tādā veidā, kā es daru, nav iespējams.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...