Однако для меня непрактично постоянно обновлять все сайты транспортных средств, которыми я управляю, одной и той же информацией. поскольку это приводит к избыточности данных, особенно при работе с большим объемом информации.
Чтобы решить эту проблему, моей идеей было создать общую базу данных для хранения данных, которые будут использоваться всеми сайтами и необходимо поддерживать в актуальном состоянии. Общая база данных содержит вложенные таблицы годов, версий, моделей, марок, типов.
Проблема заключается в интеграции. Моя основная база данных (и будущие базы данных, поскольку их будет несколько, и все они относятся к общей базе данных) хранят данные о перечисленных транспортных средствах, включая ссылку наyear_id транспортного средства, которая хранится в общей базе данных.
Я, как обычно, уже настроил модель в своем проекте Laravel, включая отношения BelongsTo. Я также указал соединение, которое будет использоваться для моделей «Год», «Версия», «Модель», «Бренд» и «Тип».
Однако, когда я пытаюсь использовать контроллер, это не удается. Например, он пытается выполнить поиск version.id не в той базе данных. Я попробовал несколько решений, но пока ни одно не сработало.
PS. Я рассматриваю возможность использования API для связи с базой данных в будущем, чтобы я мог реализовать кеш в ответе, чтобы минимизировать запросы к общей базе данных, не знаю, повлияет ли это сейчас, я думаю, что смогу изменить его позже.
Вот часть контроллера:
Код: Выделить всё
`
public function index()
{
$ajustes = Ajustes::first();
$cars = Vehicles::query()
->with(['year.version.model.brand.type'])
->status(1)
->typeId(1)
->orderBy('vehicles.created_at', 'DESC')
->limit($ajustes->max_cars ?? 5)
->get();
`
`
класс Vehicles расширяет модель
{
protected $connection = 'mysql';
используйте LogsActivity;
используйте SoftDeletes;
protected $table = 'vehicles';
Код: Выделить всё
public function scopeJoins($query)
{
$query->with([
'years.versions.models.brands.types',
]);
}
public function scopeTypeId($query, $typeId)
{
if (!is_null($typeId)) {
$query->whereHas('year.version.model.brand.type', function ($q) use ($typeId) {
$q->where('id', $typeId);
});
}
}
public function scopeBrandId($query, $brandId)
{
if (!is_null($brandId)) {
$query->whereHas('year.version.model.brand', function ($q) use ($brandId) {
$q->where('id', $brandId);
});
}
}
public function scopeModelId($query, $modelId)
{
if (!is_null($modelId)) {
$query->whereHas('year.version.model', function ($q) use ($modelId) {
$q->where('id', $modelId);
});
}
}
public function scopeVersionId($query, ?int $value): void
{
if (!empty($value)) {
$query->whereHas('years.versions', function ($q) use ($value) {
$q->where('id', $value);
});
}
}
public function scopeYearId($query, ?int $value): void
{
if (!empty($value)) {
$query->whereHas('years', function ($q) use ($value) {
$q->where('id', $value);
});
}
public function year()
{
return $this->belongsTo(Years::class, 'year_id', 'id', 'vehicles_api_global');
}
`
`
класс Years расширяет модель
{
используйте LogsActivity;
используйте SoftDeletes;
Вот модель Year:
`
класс Years расширяет модель
{
используйте LogsActivity;
используйте SoftDeletes;
р>
Код: Выделить всё
protected $connection = 'vehicles_api_global';
protected $table = 'years';
public function scopeVersionId(\Illuminate\Database\Eloquent\Builder $query, ?int $value = null): void
{
if (!empty($value)) {
$query->where('version_id', '=', $value);
}
}
public function version()
{
return $this->belongsTo(Versions::class, 'version_id', 'id');
}
}
Я пытался указать соединение в моделях, я пытался их соединить, но не получилось из-за разницы в базах данных.
Я пытался сделать 2 отдельных запросы на месте, но тоже не сработало.
Подробнее здесь: https://stackoverflow.com/questions/792 ... ship-model