teratail header banner
teratail header banner
質問するログイン新規登録
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

1115閲覧

Laravel Modelをextendsしているクラスで、テーブル定義(デフォルト値/初期値)を取得したい

meex

総合スコア83

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2022/12/28 16:09

0

0

前提

AAAテーブル定義は以下の通りです。

名前タイプデフォルト値
shop_namevarchar(50)NULL

この時、

PHP

1$tableName = (new AAA())->getTable(); 2echo $tableName ;

とすることで、「shop_name」というカラム名が取得できるのですが、

同様に例えば、

PHP

1$defaultValue = (new AAA())->getDefaultValue(); 2echo $defaultValue ;

のようにして、デフォルト値の「Null」を得たいです。

LaravelのModelを継承しているクラスで、テーブル定義のデフォルト値を取得したい時、どのようにしたらいいでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

phper.k

2022/12/28 17:19

> とすることで、「shop_name」というカラム名が取得できるのですが、 カラム名じゃなくてテーブル名ですよね?
meex

2022/12/28 23:08

ご指摘ありがとうございます。 誤記でした。 確かに「(new AAA())->getTable())」ではテーブル名が取得されるので、カラム名を取得したい時は 「Schema::getColumnListing((new AAA())->getTable());」 が適切でした。失礼いたしました。
guest

回答2

0

「何のためにデフォルトが知りたいのか」

DBでのデフォルトがどうだろうと実際に使う時はnullだったら代わりを表示するしかないのでDBのデフォルトを見ても意味がない。
{{ $post->name ?? 'デフォ' }}

投稿2022/12/28 23:18

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meex

2022/12/28 23:37

「何のためにデフォルトが知りたいのか」 の回答としては 「$data = AAA::find(1) をやったときに、empty($data) === true だった場合、$retに初期値を入れたい。その時に{$ret['users_id'] = null}などいちいち全カラム名を指定して代入するのは手間なので、デフォルト値を取得できれば、foreachで回すだけで簡単に初期値をセットできるし、もしカラム名に変更があったとしても修正範囲を減らせられるよね!」 という思いがあり、質問いたしました。 DB側のカラム名やデフォルト値の変更があってもPHP側でやってる初期化ソースの修正をなるべく減らしたいのですが、いい方法はありますでしょうか?
yuma.inaura

2022/12/29 03:50

DBにdefaultがあるならプログラム側で初期値を指定しなくても良いんじゃないですか?
meex

2022/12/30 12:32

伝え方が分かり辛く申し訳ございません。 「PHP側で初期値を設定して、DBに入れたい」のではなく「DBのテーブルで各カラムに設定されている初期値を取得して、PHP変数に入れたい」というイメージです。 例えば以下のような使い方をしたいのです。 例:テーブルから値を取得するとき、 [#1]id=10のレコードをDBから取得→もしある場合は、そのレコードの値を画面に表示する [#2]id=10のレコードをDBから取得→もしない場合は、画面にデフォルト値を表示する の2パターンがあるかと思います。 この時、もし[#2]だった場合、  $display['id'] = null;  $display['name'] = '';  $display['email'] = null;   : と、1つ1つ初期値をPHP変数に代入するのが面倒に感じていました。 そのため、DBの各カラムに設定している初期値(デフォルト値)を取得することができれば、 foreach( DBのテーブルのデフォルト値 as $colmun_name => $default_value){   $display[$colmun_name] = $default_value; } というような記述ができるので、楽だなと思った次第なのです。
guest

0

ベストアンサー

無理やりやろうと思ば、以下のように実装すればできなくはない。
※MySQL のとき

php

1class User extends Authenticatable 2{ 3 public function getColumns() 4 { 5 return \DB::table('information_schema.columns') 6 ->where([ 7 ['TABLE_SCHEMA', \DB::getDatabaseName()], 8 ['TABLE_NAME', $this->getTable()], 9 ]) 10 ->get(); 11 } 12 13 public function getColumnDefaultValue($column_name) 14 { 15 $columns = $this->getColumns(); 16 return $columns->firstWhere('COLUMN_NAME', $column_name)->COLUMN_DEFAULT; 17 } 18}

投稿2022/12/28 17:40

phper.k

総合スコア3923

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meex

2022/12/30 13:03

具体的なソースもお教えくださりありがとうございます。 基本的には、テーブルのデフォルト値を取得する機能は「(new AAA())->getTable()」みたいな形で簡単に行えるものはないという事を知り勉強になりました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問