У меня есть веб-сайт, на котором пользователи могут отправить свой продукт (например, автомобиль, мобильный, компьютеры) и продавать его онлайн на моем сайте, может быть, что-то вроде Ebay и Amazon.
я имею Объявления таблица, которая хранит всю общедоступную информацию об одной вещи, используя Mass Assignment
, и другие категории, такие как мобильные, автомобили и компьютеры есть свой стол и будет хранить профессиональную и дополнительную информацию этой категории на нем (например, автомобили имеют некоторую дополнительную информацию, такую как цвет, тип топлива, гарантия, несчастные случаи, страхование).
Теперь, как вы знаете, у меня есть две таблицы (Объявления а также ads_mobile), и для всех форм у меня есть контроллер, который adsController
а также ads
модель, форма будет создаваться динамически, и каждая форма имеет свои собственные входные данные (например, мобильный и автомобиль имеют разные входные данные и поля), и я просто отправляю все динамические формы в adsController@check
и затем я проверяю, что это за форма (это Мобильный? Это тот Автомобиль?), а затем я хочу отправить эти данные в модель:
//adsController(This is just Example);
class User extends Eloquent {
protected $fillable_ads = array('field_one', 'field_two', 'field_three');
//And I want to use fillable_mobile_ads too
protected $fillable_mobile_ads = array('field_one', 'field_two', 'field_three');
}
Это возможно?
Как должна быть модель и контроллер?
какие-либо предложения по структуре моей программы?
Учитывая описание вашего дизайна, я бы посмотрел на полиморфные отношения. Это полезно, когда у вас есть несколько моделей (мобильные, автомобильные, компьютерные), которые совместно используют определенный набор информации (реклама), общий для всех моделей.
class Ad extends Eloquent {
protected $fillable = array('ad_field_one', 'ad_field_two');
public function adable() {
return $this->morphTo();
}
}
class Mobile extends Eloquent {
protected $fillable = array('mobile_field_one', 'mobile_field_two');
public function ad() {
return $this->morphOne('Ad', 'adable');
}
}
class Car extends Eloquent {
protected $fillable = array('car_field_one', 'car_field_two');
public function ad() {
return $this->morphOne('Ad', 'adable');
}
}
class Computer extends Eloquent {
protected $fillable = array('computer_field_one', 'computer_field_two');
public function ad() {
return $this->morphOne('Ad', 'adable');
}
}
Для поддержки вышеуказанных отношений вам необходимо добавить два поля в ads
Таблица: adable_type
а также adable_id
, Это можно сделать в процессе миграции с помощью оператора $table->morphs('adable');
Документацию о полиморфных отношениях можно найти Вот.
Laravel всегда использует один модель для один Таблица.
Я предлагаю переосмыслить дизайн вашей базы данных. Почему бы вам не создать одну таблицу для рекламы и положить все там есть реклама (например, мобильные телефоны, автомобили и компьютеры в одной таблице) и добавьте столбец, в котором указано, какой тип:
+----+----------+-----------+-----------+-------------+
| ID | type | field_one | field_two | field_three |
+----+----------+-----------+-----------+-------------+
| 1 | Mobile | {data} | {data} | null |
| 2 | Mobile | {data} | {data} | null |
| 3 | Car | null | null | {data} |
| 4 | Mobile | {data} | {data} | null |
| 5 | Computer | {data} | {data} | {data} |
+----+----------+-----------+-----------+-------------+
В этом примере у вас есть 3 мобильных телефона, 1 автомобиль и 1 компьютер в один Таблица. Теперь давайте скажем mobile
использует только поля один и два, car
использует поле три и computer
использует все поля.
Теперь из вашего car
Форма вы отправляете скрытое поле type=car
и только поле 3. От твоего mobile
Форма вы отправляете скрытое поле type=mobile
и поля 1 и 2. И так далее. Не отправленные поля остаются null
,
Я не вижу необходимости в более чем одном столе.