PHP Laravel eloquent with multiple databases, actually select something

20 浏览
0 Comments

PHP Laravel eloquent with multiple databases, actually select something

这个问题已经有答案了:

如何在Laravel中使用多个数据库

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

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

我已经设置好了一切,现在我正在测试,试图从第一个和第二个数据库中获取数据,但是文档几乎没有提供如何这么做的信息,我只找到了下面这个:

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

还有其他的资源吗?我没有找到什么东西。

到目前为止,我理解如果我使用多个数据库,我不能再使用Eloquent了?至少我不能在第二个不是默认数据库时使用Eloquent。

为了测试,我在两个数据库中创建了相同的表,每个表中有不同的数据。但是我无法查询数据,我总是得到这个错误:

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并实际选择、编辑、插入数据等的文档。

编辑

  • 我应该如何实际上从这两个数据库中选择所有用户?
  • 对于第二个数据库,我永远不需要创建新列或表,我只需要更新数据,可能Eloquent在那里不需要,这意味着我总是需要执行原始SQL,对吗?如果我使用Eloquent我还需要创建模型吗?
admin 更改状态以发布 2023年5月24日
0
0 Comments

可以使用 setConnection 方法实现

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

0
0 Comments

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

对于第二个查询,你可以做同样的事情。没必要使用Eloquent模型来实现,但如果你想实现的话,应该在User模型中定义连接。

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

另外,你必须定义想要检索的字段,如下所示:

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

非常重要的是要隐藏诸如密码等敏感字段。你可以使用另一个数组来完成这个操作:

protected $hidden = ['password'];

然后你可以使用Eloquent来实现:

$users = User::get();

0