繁体   English   中英

Laravel 分页在 eloquent 模型上 setConnection() 后不起作用

[英]Laravel Pagination not working after setConnection() on eloquent model

我试图在 Laravel 8.x 中创建一个可以使用不同数据库(动态)的模型。 它目前通过在创建模型实例后设置连接来工作,使用 Laravel 内置的“setConnection”函数。 但是,模型上的分页不起作用。 我收到以下错误:

(PDOException(code: 42S02): SQLSTATE[42S02]: Base table or view not found: 1146 Table 'test.times' doesn't exist

问题是“测试”数据库不是我当前告诉模型要连接的数据库。 我正在连接到“mysql_timer”。 分页是将数据库连接重置为默认值还是?

你可以在这里看到我的控制器代码:

public function getStats(Request $request)
    {
        $query = new Time;
        $query->setConnection('mysql_timer');

        $query = $query->with(['user']);
        
        $data = $query->paginate($length);

        dd($data);
    }

还有我的“时间”模型:

class Time extends Model
{
    use HasFactory;

    protected $table = 'times';
    public $timestamps = false;
    protected $primaryKey = 'uid';
    
    protected $fillable = [
        'uid',
        'mapid',
        'runid',
        'mode',
        'style',
        'rectime',
        'recdate',
        'strf_num',
        'jump_num'
    ];

    public function user() 
    {
        return $this->hasOne(User::class, 'uid', 'uid');
    }
}

您可以使用on($connection)开始在给定连接上查询模型:

$data = Time::on('mysql_timer')->with(['user'])->paginate($length);
public function getStats(Request $request)
    {
        $query = DB::table("mysql_timer.times as times)
                 ->join("users", "users.id", "=", "times.user_id")
                 ->paginate($length);

        dd($query);
    }

你试过吗?

首先制作模型

php artisan make:time

走后模型

protected $connection = "mysql_timer";
protected $table = "times";
protected $guarded = [];

public function user(): BelongsTo
{
    return $this->belongsTo(User::class);
}

后去控制器

$query = Time::query()->with("user")->paginate($length);

dd($query);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM