【问题标题】:Using setConnection on Laravel 4 Models在 Laravel 4 模型上使用 setConnection
【发布时间】:2013-12-17 16:13:21
【问题描述】:

在从辅助数据库获取模型实例之前,我试图在 Laravel 4 中设置模型正在使用的连接。我在Config/database.php 中正确填写了辅助连接的信息,但由于某种原因,当我拨打$userModel->all() 时,Laravel 会恢复为默认连接

$userModel = new User;
$userModel->setConnection('secondary_connection');
$users = $userModel->all();

这给出了错误

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'boradmin_master.users' doesn't exist (SQL: select * from ``users``) (Bindings: array ( ))

我追溯到可能是由于 Model::all() 函数中的一些代码而发生的:

* @param  array  $columns
* @return \Illuminate\Database\Eloquent\Collection|static[]
*/
public static function all($columns = array('*'))
{
    $instance = new static;

    return $instance->newQuery()->get($columns);
}

所以我的问题是,如何让 Laravel 尊重我使用我在 $userModel->setConnection('secondary_connection') 中提供的连接名称的愿望?

【问题讨论】:

    标签: php mysql model laravel laravel-4


    【解决方案1】:

    Eloquent 的 all() 将在执行 all() 方法之前创建一个新模型,因此您需要告诉它静态选择一个连接,但您试图通过在调用 all() 之前实例化模型来动态地执行此操作.

    你试过了吗?:

    User::on('secondary_connection')->get();
    

    【讨论】:

    • 这让我走上了正轨。您必须使用 User::on('secondary_connection')->get();,因为 Query/Builder 没有“all”方法。
    猜你喜欢
    • 2013-09-25
    • 2014-03-25
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    • 2014-01-31
    • 1970-01-01
    • 2013-02-17
    • 2014-11-24
    相关资源
    最近更新 更多