前提・実現したいこと
PHPのフレームワークであるLaravelを使用して、CONCAT()を使用した年齢比較のSQL処理の実装をしている者です。
MySQL上では実行できたSQL処理がLaravelでは下記のエラーが発生してしまいます。
「試したこと」の解決方法を試しましたが、解決できませんでしたので、何かしらアドバイス・参考記事の紹介をお願いできませんでしょうか?
また、これが初めての質問のため、意図が正確に伝えきれていなかったり、表現が稚拙で伝わりづらいかもしれません。
もしよろしければ、もっと伝えるためにはどう意識したらよいか等のアドバイスもいただけると幸いです。
よろしくお願いいたします。
発生している問題・エラーメッセージ
【やりたいこと・発生している問題】 以下の【MySQLでの処理結果】と同じ処理をLaravelで実装したい。 しかし、Laravelで「該当のソースコード」の処理を書いて実行するも【エラーメッセージ】の内容のエラーを吐いてしまう。 【MySQLに登録しているテーブル情報】 SELECT * FROM foo; +----+---------+---------+---------+ | id | birth_y | birth_m | birth_d | +----+---------+---------+---------+ | 1 | 1990 | 1 | 1 | +----+---------+---------+---------+ | 2 | 1995 | 1 | 1 | +----+---------+---------+---------+ | 3 | 2015 | 1 | 1 | +----+---------+---------+---------+ 【MySQLでの処理結果】 期待値:処理を実行し、10歳以上のデータであるid=1,2の2件のデータを処理結果として取得したい。 結果:期待値通りid=1,2の2件のデータが処理結果として取得できている。 SELECT * FROM foo WHERE IFNULL (TIMESTAMPDIFF(YEAR, CONCAT(birth_y,'/',IFNULL(birth_m,1),'/',IFNULL(birth_d,1)), CURDATE()),0) >= 10; +----+---------+---------+---------+ | id | birth_y | birth_m | birth_d | +----+---------+---------+---------+ | 1 | 1990 | 1 | 1 | +----+---------+---------+---------+ | 2 | 1995 | 1 | 1 | +----+---------+---------+---------+ 【エラーメッセージ】 ErrorException A non-numeric value encountered 【該当箇所】 $query->whereRaw('IFNULL (TIMESTAMPDIFF(YEAR, CONCAT(birth_y,'/',IFNULL(birth_m,1),'/',IFNULL(birth_d,1)), CURDATE()),0) >= 10 '); どうやら、CONCAT()で文字列に変換したのがエラーの原因になっているようですが、MYSQL上では【MySQLでの処理結果】に記載しているように、実行できています。
該当のソースコード
PHP
1<?php 2 3use App\Models\Foo; 4 5public function search() { 6 $query = Foo::query(); 7 $query->select('*'); 8 $query->whereRaw('IFNULL (TIMESTAMPDIFF(YEAR, CONCAT(birth_y,'/',IFNULL(birth_m,1),'/',IFNULL(birth_d,1)), CURDATE()),0) >= 10 ')->get(); 9} 10
試したこと
〇クエリビルダのstatementメソッドを使用
public function search() {
$query = Foo::query();
$query->select('*');
$query->statement('IFNULL (TIMESTAMPDIFF(YEAR, CONCAT(birth_y,'/',IFNULL(birth_m,1),'/',IFNULL(birth_d,1)), CURDATE()),0) >= 10 ')->get();
}
⇒
【エラーメッセージ】
ErrorException
A non-numeric value encountered
このエラーが出てしまう。
補足情報(FW/ツールのバージョンなど)
【バージョン】
〇MySQL Workbench ver8.0.21
〇Laravel Framework 6.20.16
【参考記事】
〇https://readouble.com/laravel/6.x/ja/database.html
〇https://readouble.com/laravel/6.x/ja/queries.html
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/26 02:26