在Laravel 5.8中,我尝试为模型设置不同的连接。
我在config/database.php
(mysql1
和mysql2
)中建立了2个数据库连接
首先,我参加了MyModel
课:
namespace App\Models;
class MyModel
extends \Illuminate\Database\Eloquent\Model {
public static function sqlselect($sql) {
$result = DB::select(DB::raw($sql));
return $result;
}
}
然后,我从该类派生了一个新模型,并设置了它应使用的连接:
namespace App\Models;
class FooModel extends \App\Models\MyModel {
protected $connection = 'mysql2';
}
当我尝试使用此FooModel
时,我希望它使用mysql2
连接,但不会。
use App\Models\FooModel;
$sqlresult = FooModel::sqlselect('SELECT * FROM foo');
给出一个错误,指出foo
表不在数据库中,因为它仍然尝试使用默认的mysql1
连接。
在保持所有内容不变的情况下执行此操作的任何方法吗?
答案 0 :(得分:0)
使用与laravel的多个连接:
查询生成器
$queryResult = DB::connection('mysql2')->select(...);
雄辩:
class MyModel extends Model {
protected $connection = 'mysql2';
}
您还可以定义运行时使用的connection
:
class MyController extends Controller {
public function myMethod()
{
$myModel = new MyModel;
$myModel->setConnection('mysql2'); // non-static method
$queryResult = $myModel->find(1);
$queryResult = MyModel::on('mysql2')->find(1); // static method
return $queryResult;
}
}
有关multiple database的Laravel文档。
答案 1 :(得分:0)
我不知道您为什么要做自己的工作,也不知道为什么要使用Eloquent
而不是class MyModel extends Model
{
public static function sqlselect($sql) {
return DB::connection(static::$conn)->select(DB::raw($sql));
}
}
,但是:
class FooModel extends MyModel
{
protected $connection = 'mysql2';
protected static $conn = 'mysql2';
}
static
在FooModel
内定义一个MyModel
属性,并在{{1}}中引用该属性。