ホーム > Laravel > LaravelのArgument 1 passed to Illuminate\Database\Grammar::parameterize() must be of the type array, int given, called inの解決方法
Laravel
LaravelのArgument 1 passed to Illuminate\Database\Grammar::parameterize() must be of the type array, int given, called inの解決方法
いつもご利用ありがとうございます。
この記事には広告が掲載されており、その広告費によって運営しています。
目次
オススメ本
Laravel で、「Argument 1 passed to Illuminate\Database\Grammar::parameterize() must be of the type array, int given, called in」というエラーが出たときの解決方法についてまとめました。
結論「データベースのカラムに対して json を指定していたら、モデルに追記する必要がある」
モデルに以下を追記する
protected $casts = [
'カラム名' => 'json',
];
詳しく解説
マイグレーションファイル
Laravel のマイグレーションファイルにおいて、カラムに配列を保存することができます。
いろんなケースがあると思いますが、多対多でテーブル作ると大変な時とかで使うかもしれません(あまり使うものでも無いかなとも思います)
そのときは、マイグレーションファイルに以下のように記載します。
$table->json('post_ids'); //post_idsがカラム名です。post_idが配列ではいる想定。
コントローラーなどで保存する時
$model = new Model;
$model->post_ids = [1,2,3,4,5];
$model->save();
こんな感じで保存することができますが、、、この保存の時に、
Argument 1 passed to Illuminate\Database\Grammar::parameterize() must be of the type array, int given, called in
というエラーが発生しました。
モデルに追記する
例として User モデルに追記するとしたら、こうなります。
<?php
namespace App\Models\User;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
protected $casts = [
'post_ids' => 'json',
];
}
これを追記してから再び試してみたところ、同じエラーは発生せず、予期したとおりにデータが入りました。やった!
使用するときは普通に配列で使える
$ids = $user->post_ids //これで[1,2,3,4,5]と取得できるので、
foreach($ids as $id){
}
こんな感じで配列扱いすることが可能です。
注意点は、リレーションを書きづらいということ
リレーション先のデータを表示するのには向いていないので、気をつけてつかいましょう!!
まとめ
以上です。
誰かの参考になればと思います。
感想・苦情は TwitterDM にご連絡ください。
それでは!
人気記事