kazunarigit
@kazunarigit (村田 一成)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

テーブルの登録に関するエラー

2022-06-23.png

解決したいこと

スクレイピングでデータベースに登録する際、テーブルで指定しているデータ型以外のデータがあった場合、nullになるようにしたい。該当選手で名前が姓名で分かれていない場合やデータがないときにー(ハイフン)で表示されるとき

該当するソースコード

Schema::create('playerdata1', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('playerlastname'); //苗字
            $table->string('playerfirstname')->nullable()->change(); //名前
            $table->integer('times_at_but');  //打数
            $table->integer('hit'); // 安打
            $table->integer('hit_point');  // 打点
            $table->float('hit_adv', 4, 3);// 打率	
            $table->integer('homeruns'); // 本塁打	
            $table->integer('steals'); // 盗塁
            $table->integer('games');// 試合
            $table->integer('box');// 打席
            $table->timestamps();

Schema::create('playerdata2', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('playelastrname'); // 苗字
            $table->string('playefirstrname')->nullable()->change(); // 名前
            $table->integer('ining'); // 投球回	
            $table->integer('hit_by_a_pitch'); // 被安打	
            $table->integer('by_homeruns'); // 被本塁打	
            $table->integer('wins'); // 	勝ち
            $table->integer('loses'); // 敗け	
            $table->integer('saves'); // セーブ	
            $table->integer('resp_points'); // 自責点	
            $table->integer('lost_points'); // 失点	
            $table->float('saved_adv', 3 , 2); // 防御率	
            

自分で試したこと

検索して、nullable->changeを付加した。(解決は出来ず)
該当箇所すべてに適用できればいい。

0

2Answer

スクレイピングでデータベースに登録する際、テーブルで指定しているデータ型以外のデータがあった場合、nullになるようにしたい。該当選手で名前が姓名で分かれていない場合やデータがないときにー(ハイフン)で表示されるとき

解決したいことを DB 側だけで制御しようとするとかなり難解な Eloquent を書く必要がありますので、 DB 側は null を許可するまでに留めて PHP 側でパラメータのバリデーションを行い指定したデータ型でなければ null に整形すると良いと思います。

// save(), insert() 時
([
    // 空もしくは string 型でない場合は null に整形
    'playerlastname' => (!empty($playerlastname) && is_string($playerlastname))
                           ? $playerlastname 
                           : null,
    // int 型でなければ null に整形
    'times_at_but' => is_int($times_at_but) ?? null,
    'hit' => 'is_int($hit) ?? null,
])
0Like

Your answer might help someone💌