Laravel - firstOrCreate () обнаруживает аргумент 1 как не массив, но это - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть следующий код:

$coretable = new coretable;
$coretableKeyArray = [];
$coretableKeyArray["Internal_key"] = $coretableInput["Internal_key"];
if(is_array($coretableKeyArray)){
  log::info("recognized as array");
}
$lastInsert = $coretable->firstOrCreate($coretableKeyArray, $coretableInput);

Массив для аргумента 1 из firstOrCreate() выглядит следующим образом:

[2020-02-27 07:30:50] local.INFO: array (
  'Internal_key' => 'TESTKEY_4',
)  

is_array() также возвращает true на $coretableKeyArray

Однако при выполнении вызова firstOrCreate() здесь:

$lastInsert = $coretable->firstOrCreate($coretableKeyArray, $coretableInput);

я получаю эту ошибку:

 (1/1) TypeError

Argument 1 passed to Illuminate\Database\Eloquent\Builder::firstOrCreate() must be of the type array, int given, called in E:\aether-backend\vendor\illuminate\support\Traits\ForwardsCalls.php on line 23
in Builder.php line 415
at Builder->firstOrCreate(4, array('coretable_id' => 4, 'description_itc' => 'EXTENSION_ITC_4'))in ForwardsCalls.php line 23
at Model->forwardCallTo(object(Builder), 'firstOrCreate', array(4, array('coretable_id' => 4, 'description_itc' => 'EXTENSION_ITC_4')))in Model.php line 1618
at Model->__call('firstOrCreate', array(4, array('coretable_id' => 4, 'description_itc' => 'EXTENSION_ITC_4')))in modelInteractions.php line 128

Почему это так? Кроме того, почему журнал ошибок показывает мне:

Builder->firstOrCreate(4, array('coretable_id' => 4, 'description_itc' => 'EXTENSION_ITC_4'))

Почему здесь первый аргумент "4"? Что это представляет? Потому что он не может представлять значение первого аргумента вызова для firstOrCreate(), потому что это был совершенно другой ...

РЕДАКТИРОВАТЬ:

Вот полный набор ошибок, согласно запросу комментарий:

 (1/1) TypeError

Argument 1 passed to Illuminate\Database\Eloquent\Builder::firstOrCreate() must be of the type array, int given, called in E:\aether-backend\vendor\illuminate\support\Traits\ForwardsCalls.php on line 23
in Builder.php line 415
at Builder->firstOrCreate(4, array('coretable_id' => 4, 'description_itc' => 'EXTENSION_ITC_4'))in ForwardsCalls.php line 23
at Model->forwardCallTo(object(Builder), 'firstOrCreate', array(4, array('coretable_id' => 4, 'description_itc' => 'EXTENSION_ITC_4')))in Model.php line 1618
at Model->__call('firstOrCreate', array(4, array('coretable_id' => 4, 'description_itc' => 'EXTENSION_ITC_4')))in modelInteractions.php line 127
at modelInteractions->insertModel(array('Internal_key' => 'TESTKEY_4'), array('Internal_key' => 'TESTKEY_4', 'extensiontable_itc' => array('description_itc' => 'EXTENSION_ITC_4'), 'extensiontable_sysops' => array('description_sysops' => 'EXTENSION_SYSOPS_4')), array('extensiontable_itc', 'extensiontable_sysops'))in UserController.php line 100
at UserController->insertDataCreateNewItem(object(Request))
at call_user_func_array(array(object(UserController), 'insertDataCreateNewItem'), array(object(Request)))in BoundMethod.php line 32
at BoundMethod::Illuminate\Container\{closure}()in Util.php line 36
at Util::unwrapIfClosure(object(Closure))in BoundMethod.php line 90
at BoundMethod::callBoundMethod(object(Application), array(object(UserController), 'insertDataCreateNewItem'), object(Closure))in BoundMethod.php line 34
at BoundMethod::call(object(Application), array(object(UserController), 'insertDataCreateNewItem'), array(), null)in Container.php line 590
at Container->call(array(object(UserController), 'insertDataCreateNewItem'), array())in RoutesRequests.php line 376
at Application->callControllerCallable(array(object(UserController), 'insertDataCreateNewItem'), array())in RoutesRequests.php line 342
at Application->callLumenController(object(UserController), 'insertDataCreateNewItem', array(true, array('uses' => 'App\\Http\\Controllers\\UserController@insertDataCreateNewItem', 'middleware' => array('auth')), array()))in RoutesRequests.php line 316
at Application->callControllerAction(array(true, array('uses' => 'App\\Http\\Controllers\\UserController@insertDataCreateNewItem', 'middleware' => array('auth')), array()))in RoutesRequests.php line 278
at Application->callActionOnArrayBasedRoute(array(true, array('uses' => 'App\\Http\\Controllers\\UserController@insertDataCreateNewItem', 'middleware' => array('auth')), array()))in RoutesRequests.php line 258
at Application->Laravel\Lumen\Concerns\{closure}(object(Request))
at call_user_func(object(Closure), object(Request))in Pipeline.php line 52
at Pipeline->Laravel\Lumen\Routing\{closure}(object(Request))in Authenticate.php line 36
at Authenticate->handle(object(Request), object(Closure))in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request))in Pipeline.php line 32
at Pipeline->Laravel\Lumen\Routing\{closure}(object(Request))in Pipeline.php line 105
at Pipeline->then(object(Closure))in RoutesRequests.php line 413
at Application->sendThroughPipeline(array('App\\Http\\Middleware\\Authenticate'), object(Closure))in RoutesRequests.php line 259
at Application->handleFoundRoute(array(true, array('uses' => 'App\\Http\\Controllers\\UserController@insertDataCreateNewItem', 'middleware' => array('auth')), array()))in RoutesRequests.php line 165
at Application->Laravel\Lumen\Concerns\{closure}(object(Request))
at call_user_func(object(Closure), object(Request))in Pipeline.php line 52
at Pipeline->Laravel\Lumen\Routing\{closure}(object(Request))in CORS.php line 34
at CORS->handle(object(Request), object(Closure))in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request))in Pipeline.php line 32
at Pipeline->Laravel\Lumen\Routing\{closure}(object(Request))in Pipeline.php line 105
at Pipeline->then(object(Closure))in RoutesRequests.php line 413
at Application->sendThroughPipeline(array('App\\Http\\Middleware\\CORS'), object(Closure))in RoutesRequests.php line 171
at Application->dispatch(null)in RoutesRequests.php line 108
at Application->run()in index.php line 28

РЕДАКТИРОВАТЬ: Вопрос может быть закрыт или удален, решение проблемы было где-то еще.

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

Вместо сохранения в переменной вы можете непосредственно поместить ее в метод.

Значительно чище и удобочитаемее.

$coretable->firstOrCreate([
 'Internal_key' => $coretableInput["Internal_key"]
], $coretableInput);
1 голос
/ 27 февраля 2020

Попробуйте:

$lastInsert = $coretable->firstOrCreate((array)$coretableKeyArray, $coretableInput);

Если это не сработает, в случае, если вы перегружены firstOrCreate, убедитесь, что он не выполняет пользовательских преобразований в нем.

...