Задать вопрос
@dk-web

Как правильно переструктурировать БД под Laravel, чтобы корректно использовать возможности Eloquent?

Благодаря совету D' и корректному пинку удалось решить прежнюю задачу по связке hasMany.
Но получилось так, что имеющиеся таблицы не приспособлены под Ларавел... и их нужно как-то переформатировать, чтобы связать. Буду признателен за практический совет-помощь...

Что имею:
1) Таблица-справочник - countries (названия стран)
Структура:
id | country_name

2) Таблица регистраций пользователей - users
Структура
id| name | country_id

3) Таблица с праздниками в странах - holidays
Структура
id | country_name (текстом) | date

Я думал, что свяжу users и holidays, но не тут то было... в Таблице holidays id-шник просто порядковый номер записи, а название страны хранится текстом...

Задача 1: сделать структуру таблицы holidays
id(праздника) | country_id | date

Если я правильно понимаю, то делаю обычный join для подстановки названия страны по ее country_id.
Получу примерно следующий массив объектов
id(праздника) | country_id | country_name (из countries) | date

На самом деле пока писал вопрос-запрос (час назад) понял как решать.... и удалять жалко...

вот, что у меня получилось....

public function index(Holiday $holiday)
    {
    $holidays = $holiday -> getHolidays();

    return view('bday.index', ['holidays' => $holidays]);
    }


В модели Holiday:
class Holiday extends Model
{
	protected $table="holidays";
       
       public function getHolidays() {

	return $this->select(DB::raw("id,day,holiday,country_id,country_rus2,DATEDIFF(
             CONCAT(
                 YEAR(CURDATE()),
                 '-', MONTH(day),
                 '-', DAY(day)
                 ),
         CURDATE()
         ) AS daysto"))
    ->havingRaw('daysto BETWEEN 0 AND 10')
    ->get();

	}

	public function name() {
			return $this->hasOne('App\Country','rus_name','country_rus2');
	}

	public function users() {
			return $this->hasMany('App\User','country_id','country_id');
	}
}

Ну и собственно пока пустая, проинициализированная модель Country с привязкой к таблице countries

ну как-то так... снова огород?...
опять же повторюсь задачу решает.. правда слишком много запросов...
я готов к тому, что вы опять раскритикуете, но ежели и так, то как надо?)
  • Вопрос задан
  • 312 просмотров
Подписаться 1 Оценить 2 комментария
Пригласить эксперта
Ответы на вопрос 1
@mustafo
Я бы на вашим месте добавил в таблицу holidays внешний ключ country_id

$table->integer('country_id')->unsigned()->index();
$table->foreign('country_id')->references('id')->on('countries')->onDelete('cascade');


И в этой же миграции написал бы скрипт, который ищет по country_name айдишники стран и заполняет этот новый столбец. В таком случае меньше геморроя в будущем и код чище.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы