PHP Laravel eloquent with multiple databases, actually select something
PHP Laravel eloquent with multiple databases, actually select something
这个问题已经有答案了:
我在我的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日
$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();