Я настраиваю несколько моделей, которые хотят знать правильный подход к структуре таблицы и отношениям модели.Laravel 4 Eloquent/Model Relationships
Предположим, у нас есть магазин, содержащий продукты, каждый со свойствами и цветом.
Таблица products
- ID
- size_id
- color_id
- цена
Таблица sizes
- идентификатор
- имя
Таблица colors
- идентификатор
- имя
Модели
class Product extends Eloquent {
public function size() {
return $this->hasOne('Size', 'id');
}
public function color() {
return $this->hasOne('Color', 'id');
}
}
class Size extends Eloquent {
public function products() {
return $this->belongsTo('Product', 'size_id');
}
}
class Color extends Eloquent {
public function products() {
return $this->belongsTo('Product', 'color_id');
}
}
Таким образом, я легко могу повторить цвет/размер продукта с использованием {{ Product->size['name'] }}
. Кроме того, я хочу передать Eloquent внешний ключ размера size.id
, например Product::where('size_id', '5')
, а не его имя size.name
.
Задача: Выполнение $products = Product::has('size', '=', '5')->get()
не дает мне никаких результатов, но делает $products = Product::where('size_id', '5')->get()
делает.
Я довольно смущен, что пошло не так?
Есть ли у Вас внешняя установка ограничений, правильно? –
@RobW Я только что редактировал сообщение, вы имеете в виду '$ this-> attribTo ('Size', 'size_id');'? – Nyxynyx
И, вы не имеете в виду '$ products = Product :: has ('size', '> =', 5) -> paginate (15)' –