在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');由于数据库仍尝试使用默认的mysql1连接,因此会显示foo表不在数据库中的错误。
有没有办法做到这一点,同时仍然保持所有东西都是静态的?
发布于 2019-06-08 07:14:57
对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;
}
}Laravel关于multiple database的文档。
发布于 2019-06-08 13:49:39
我不知道您为什么要这么做,也不知道为什么要使用DB而不是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';
}在FooModel中定义一个static属性,并在MyModel中引用该属性。
https://stackoverflow.com/questions/56502062
复制相似问题