PHP Laravel雄辩地使用了多个数据库,实际上选择了一些东西

时间:2019-07-16 09:01:49

标签: php database laravel eloquent

我在Laravel项目中使用了两个数据库连接。

我需要修改两个数据库中的表。

我已经设置了所有内容,现在我正在玩耍并尝试从第一个数据库和第二个数据库中获取数据,但是文档几乎没有提供有关这样做的信息,我只是发现了这一点:

$users = DB::connection('foo')->select(...);

某处是否有更多资源?我什么都找不到。

到目前为止,我了解如果我使用多个数据库,我不再雄辩了吗?至少我不能对第二个数据库使用雄辩的语言,这不是默认值。

为了进行测试,我在两个数据库上使用不同的数据创建了相同的表。但我无法查询数据,总是会收到此错误:

Undefined property: Illuminate\Database\MySqlConnection::$User

这是我的测试:

 $users1 = DB::connection('mysql_live')->select('SELECT * FROM users');
 info($users1);

 $users2 = DB::connection('mysql')->User::all();
 info($users2);

我也尝试过:

$users1 = DB::connection('mysql_live')->User::all();

最好是有关如何正确使用DB::connection以及实际选择,编辑,插入数据等的文档。

编辑

  • 我实际上如何从两个数据库中选择所有用户?
  • 对于第二个数据库,我将永远不需要创建新的列或表,我只需要更新数据,可能在那里不需要雄辩,这意味着我始终需要执行原始SQL,对吗?如果我用口才,我还需要创建模型吗?

3 个答案:

答案 0 :(得分:4)

$users1 = DB::connection('mysql_live')->table('users')->get()->toArray();

对于第二个查询,您可以执行相同的操作。没有理由为此使用雄辩的模型。但是,如果您愿意,那么:

在用户模型内,您必须定义连接

 protected $connection = 'mysql'; //which is the default as well

此外,您还必须定义要检索的字段,例如:

protected $fillable = ['email','username'];

真正重要的是隐藏诸如密码等之类的敏感字段。您可以在其中使用另一个数组:

protected $hidden = ['password'];

然后您可以使用雄辩的语言:

$users = User::get();

答案 1 :(得分:2)

这可以通过setConnection方法

$someModel = new SomeModel;
$someModel->setConnection('foo');
$something = $someModel->find(1);
return $something;

答案 2 :(得分:0)

尝试此代码,

首先,您需要设置config

Config::set('database.connections.mysql_live.database', 'dbname');
Config::set('database.connections.mysql_live.host','localhost');

然后

 $result=DB::connection('mysql_live')->table('users')->get();