Модель отношений с несколькими базами данныхPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Модель отношений с несколькими базами данных

Сообщение Anonymous »

Моя цель — создать проект для нескольких реселлеров автомобилей. Мне необходимо быть в курсе новых марок, моделей, версий и годов выпуска, которые постоянно выпускаются.
Однако для меня непрактично постоянно обновлять все сайты транспортных средств, которыми я управляю, одной и той же информацией. поскольку это приводит к избыточности данных, особенно при работе с большим объемом информации.
Чтобы решить эту проблему, моей идеей было создать общую базу данных для хранения данных, которые будут использоваться всеми сайтами и необходимо поддерживать в актуальном состоянии. Общая база данных содержит вложенные таблицы годов, версий, моделей, марок, типов.
Проблема заключается в интеграции. Моя основная база данных (и будущие базы данных, поскольку их будет несколько, и все они относятся к общей базе данных) хранят данные о перечисленных транспортных средствах, включая ссылку на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');
}
`
Вот модель Year:
`
класс 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Модель отношений с несколькими базами данных
    Anonymous » » в форуме Php
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Модель отношений с несколькими базами данных
    Anonymous » » в форуме Php
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Модель отношений с несколькими базами данных
    Anonymous » » в форуме Php
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Symfony с несколькими базами данных и FoselasticAbundle: как выполнить глобальный поиск в базе данных пользователя?
    Anonymous » » в форуме Php
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Symfony с несколькими базами данных и FoselasticAbundle: как выполнить глобальный поиск в базе данных пользователя? [зак
    Anonymous » » в форуме Php
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Php»