gpt4 book ai didi

laravel BelongsTo 与不同数据库的关系不起作用

转载 作者:行者123 更新时间:2023-12-03 13:31:42 24 4
gpt4 key购买 nike

我已经在几个地方看到过要“远离”这一点,但是唉 - 这就是我的数据库的构建方式:

class Album extends Eloquent {

// default connection

public function genre() {
return $this->belongsTo('genre');
}

和流派表:
class Genre extends Eloquent {
protected $connection = 'Resources';

}

我的database.php:
'Resources' => array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'resources',
'username' => 'user',
'password' => 'password',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),

'mysql' => array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'my_data',
'username' => 'user',
'password' => 'password',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),

当我尝试运行时
Album::whereHas('genre', function ($q) {
$q->where('genre', 'German HopScotch');
});

它没有正确选择(不会将数据库名称添加到表“流派”):
Next exception 'Illuminate\Database\QueryException' with message 'SQLSTATE[42S02]: Base table or view not found: 1146 Table 'my_data.genres' doesn't exist

重要的是要注意这完美地工作:
Album::first()->genre;

更新

到目前为止我发现的最好的方法是使用构建器的“from”方法来专门命名正确的连接。
我发现查询中的构建器可以接收“来自”
Album::whereHas('genre', function ($q) {
$q->from('resources.genres')->where('genre', 'German HopScotch');
});

这是一个不错的解决方案,但它需要我在数据库 php 中挖掘并找到一种从关系“流派”中获取正确表和数据库名称的好方法。

如果其他人可以在此解决方案的基础上构建并使其更通用,我将不胜感激。

最佳答案

laravel v5.7及以上解决方案

class Album extends Eloquent {

// default connection

public function genre() {
return $this->setConnection('Resources')->belongsTo('genre');
}
...
}

关于laravel BelongsTo 与不同数据库的关系不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32422593/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com