无法将新的 insertIgnoreUsing 函数与 DB Facade 一起使用

问题描述 投票:0回答:1

当我想将数据库查询与新的 insertIgnoringUsing 结合使用时,我收到一个奇怪的 TypeError 错误。

TypeError: MyClassX::{closure}(): Argument #1 ($query) must be of type Illuminate\Database\Eloquent\Builder, \Builders\QueryBuilder given, called in /vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php on line 356 MyClassX.php:22 

DB::table('modelX')->insertOrIgnoreUsing(
    ['a_id', 'b_id', 'c_id'],
    function (\Illuminate\Database\Eloquent\Builder $query) use ($mappingArray) {
        $query->select(['a_id', 'b_id', $mappingArray->newIdForC . ' as c_id']) // <- this line occurs the error
            ->join(
                $mappingArray->tmpTableName,
                'modelX.c_id',
                '=',
                $mappingArray->tmptableName . '.' .$mappingArray->oldIdForC
            )
            ->from('modelX');
    }
);

这是 Laravel 中的一个错误吗?

插入忽略使用:https://laravel-news.com/laravel-10-43-0#content-new-eloquent-insertorignoreusing-method

laravel eloquent
1个回答
0
投票

首先我没有罚款任何名为:

insertOrIgnoreUsing()

的函数

参考:https://laravel.com/docs/6.x/queries#inserts

这是经过修改的函数,例如

get()
toArray()

DB::table('modelX')->insertOrIgnore(   // change method name
['a_id', 'b_id', 'c_id'],
function (\Illuminate\Database\Eloquent\Builder $query) use ($mappingArray) {
    $query->select(['a_id', 'b_id', $mappingArray->newIdForC . ' as c_id'])
        ->join(
            $mappingArray->tmpTableName,
            'modelX.c_id',
            '=',
            $mappingArray->tmptableName . '.' . $mappingArray->oldIdForC
        )
        ->from('modelX')
        ->get()->toArray();  // added to get record in array
}

);

希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.