eloquentで特定のカラムを除外する方法
2023-10-27 21:39:45
質問
私はeloquentを使用しているとき、私は私のデータベースで私が選択したものを含むオブジェクトを埋めるために"where"メソッドを使用し、メソッド'get'を使用することができます。 私は意味します。
$users = User::where('gender', 'M')->where('is_active', 1)->get(['pseudo', 'email', 'age', 'created_at'])->toArray();
ここで、私は'疑似'、'email'などのように取得したいカラムを選択することができます。 しかし、私がlaravelのドキュメントで見逃しているのは、その逆を行う方法です。 それはそのようなものである可能性があります。
$users = User::where('gender', 'M')->where('is_active', 1)->notGet(['pseudo', 'email', 'age', 'created_at'])->toArray();
今後のご回答をよろしくお願いします。
どのように解決するのですか?
モデルの配列またはJSON表現から属性を隠す必要があるだけなら、1つまたは両方のアプローチを使用することができます。
-
を追加します。
$hidden
プロパティをモデルに追加します。class User extends Model { /** * The attributes that should be hidden for arrays. */ protected $hidden = ['password']; }
-
を使用します。
makeHidden
機能$users = $users->makeHidden(['address', 'phone_number']);
詳しくは他の回答をご覧ください... しかし 時には、アプリケーションに巨大なデータ(地理空間、HTML、ログ...)をロードしたくない、それは遅く、より多くのメモリを取るでしょう。OPはSQLクエリを求めたので私の答えになりましたが、ほとんどの場合、JSONレスポンスからデータのみを隠す方が便利です。
SQLにはカラムを明示的に除外するビルドインオプションがないため、Laravelではできません。しかし、次のことを試すことができます。 このトリック
更新
もうひとつのトリックは、モデル内のすべてのカラムを指定することです (または、追加のクエリを使用して、すべてのカラムを取得するために
$this->getTableColumns()
から
この答え
を追加し、各移行後にキャッシュして2回のクエリを回避することも可能です。
ローカルスコープ
という機能を追加します。
// The below code requires you to define all columns in $columns.
// A better approach is to query the schema of the table and cache it after each
// migration, for more details: https://stackoverflow.com/a/56425794/3192276
protected $columns = ['id','pseudo','email'];
public function scopeExclude($query, $value = [])
{
return $query->select(array_diff($this->columns, (array) $value));
}
では、:
$users = User::where('gender', 'M')
->where('is_active', 1)
->exclude(['pseudo', 'email', 'age', 'created_at'])
->toArray();
関連
-
[解決済み】予期せぬ例外。SQLSTATE[HY000] [1045] Access denied for user ****@'localhost' (using password: YES)
-
[解決済み】メンバ関数をnullで呼び出す?
-
[解決済み】PHPからPythonスクリプトを実行する
-
[解決済み】Wordpressの子テーマのstyle.cssが効かない。
-
[解決済み] Laravel Eloquentを使用して複数のWhere句クエリを作成する方法?
-
[解決済み] Laravel Eloquentを使って最後に挿入されたIDを取得する
-
[解決済み] Laravel Eloquent クエリ WHERE を OR AND OR で使用する?
-
[解決済み】Laravel EloquentのWith()関数で特定のカラムを取得する。
-
[解決済み】laravel eloquentで特定の列を選択する方法
-
[解決済み】Eloquentで「if not null」を確認する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】mysqli_result クラスのオブジェクトを文字列に変換できない
-
[解決済み] SAJAXは死んだか?何を置き換えるべきか?
-
[解決済み】Apache + PHPで「ヘッダの前にスクリプトの出力が終了する」件
-
[解決済み】「Fatal error: Class 'MySQLi' not found "を解決するには?
-
[解決済み】子テーマのCSSが親テーマをオーバーライドしない
-
[解決済み】警告:mysql_fetch_array()はパラメータ1がリソースであることを期待、ブール値は[重複]で与えられる]
-
[解決済み】メッセージ。Trying to access array offset on value of type null [重複]配列のオフセットにアクセスしようとしています。
-
[解決済み] Uncaught SyntaxError: JSON の位置 1 に予期しないトークン o があります。
-
[解決済み] libapache2-mod-php7 パッケージの場所がわからない
-
[解決済み] MySQLで1つを除くすべての列を選択しますか?