当我想将数据库查询与新的 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
首先我没有罚款任何名为:
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
}
);
希望这有帮助。