Laravel вложенная взаимосвязь между базами данных - PullRequest
2 голосов
/ 03 августа 2020

Почему установленное соединение не работает во вложенном отношении?

Последователь. php

class Follower extends Model {
    $connection = 'followers';

    public function details() {
      return $this->belongsTo(User::class, 'user_id');
    } 
} 

Пользователь. php

class User extends Model {
    $connection = 'users';

    protected $withCount = ['notifications'];

    public function notifications() {
        return $this->setConnection('followers')->hasMany('App\Models\Notifications');
    }
}

и запрос:

Follower::query()->where('user_id', 1)->with('details')->get();

, и он выдает:

SQLSTATE [42S02]: Базовая таблица или представление не найдено: 1146 Таблица ' users.notifications 'не существует (SQL: выберите `....

Но когда я пробую это, он работает очень хорошо

User::with('notifications')->find(1);

Обновить Уведомление. php

class Notification extends Model
{
    protected $fillable = [
        'user_id',
        'builder',
        'notification_type',
        'comment_id',
        'read_at'
    ];
}

1 Ответ

1 голос
/ 04 августа 2020

Это известная проблема с laravel с 2018 года, для получения дополнительной информации см. Этот поток , также существует открытый запрос на вытягивание для устранения этой проблемы, который будет исправлен до следующий выпуск

сейчас вы можете использовать hoyvoy / laravel -cross-database-subqueries package

install package с помощью этого

composer require hoyvoy/laravel-cross-database-subqueries

Последователь. php

use Hoyvoy\CrossDatabase\Eloquent\Model;

class Follower extends Model {
    $connection = 'followers';

    public function details() {
      return $this->belongsTo(User::class, 'user_id');
    } 
} 

Пользователь. php

use Hoyvoy\CrossDatabase\Eloquent\Model;

class User extends Model {
    $connection = 'users';

    protected $withCount = ['notifications'];

    public function notifications() {
        return $this->setConnection('followers')->hasMany('App\Models\Notifications');
    }
}

для каждой модели, которую вы добавили по умолчанию protected $connection

...