как использовать только одну модель для некоторых таблиц?

У меня есть веб-сайт, на котором пользователи могут отправить свой продукт (например, автомобиль, мобильный, компьютеры) и продавать его онлайн на моем сайте, может быть, что-то вроде 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');

}

Это возможно?

Как должна быть модель и контроллер?

какие-либо предложения по структуре моей программы?

0

Решение

Учитывая описание вашего дизайна, я бы посмотрел на полиморфные отношения. Это полезно, когда у вас есть несколько моделей (мобильные, автомобильные, компьютерные), которые совместно используют определенный набор информации (реклама), общий для всех моделей.

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');

Документацию о полиморфных отношениях можно найти Вот.

0

Другие решения

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,

Я не вижу необходимости в более чем одном столе.

0

По вопросам рекламы [email protected]