問題タブ [laravel-eloquent]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - Laravel 移行で外部キーを作成するときの MySQL エラー
Laravel アプリケーションをセットアップしており、ユーザー認証にSentry 2を使用しています。デフォルトの歩哨テーブルとPost
一緒に呼び出されるモデルがあります。User
ユーザーに多くの投稿を持たせ、投稿をユーザーに所属させたいと考えています。これをデータベース スキーマに反映するには、 と の間に外部キー制約を作成する必要がありposts
ますusers
。
私が書いた移行は次のとおりです。
で実行した後php artisan migrate
、コマンド プロンプトに MySQL エラーが表示されます。
[Illuminate\Database\QueryException]
SQLSTATE[HY000]: General error: 1005 Can't create table 'blog.dev.#sql-3bb_2d' (errno: 150) (SQL: alter tableposts
add constraint posts_user_id_foreign 外部キー (user_id
) 参照users
(id
)))
users
最初は、主キー列が外部キー列とは異なるように定義されているため、このエラーが発生したと思っていましたが、user_id
両方とも として定義されていint(10)
ます。
Google から、このエラーは 2 つの列の定義が異なることが原因である可能性があることを知りましたが、ここではそうではないようです。
php - Laravel Eloquent:モデルを入力とマージ
Input::all()
モデルとデータをマージして結果を保存する方法を知りたいです。
明確にするために:私は以下のようなことをしたいと思います:
sql - Laravel - 大きな SQL ファイルのシード
本番環境で DB シード スクリプトを実行すると、メモリが枯渇します。
以下は私のシードスクリプトです。
そこで私がしたことは、シード スクリプトに無制限を追加することでした。
問題は、スクリプトを実行すると、出力がターミナルにログされ、SQL スクリプトの内容が記録されることです (これは非常に大きなものです)。
多くのメモリを消費しない DB シード内で SQL ダンプを実行する良い方法はありますか? 私が今やったことは、手動で実行することでした:
php - 雄弁なモデルで特性を使用する場合、常に熱心な負荷関係
私はHasTranslation
雄弁なモデルに -Trait を提供しています。この特性を使用するすべてのモデルは、次のような 1 対多の関係を受け取ります (ここで、私の基本的な Model と ModelLanguages の関係を見ることができます)。
私がやりたいことは次のとおりです。
現在のユーザーの言語の翻訳を使用して、「hasOne」関係を常に熱心に読み込みます。したがって、ユーザーがログインするたびに、私のモデルは$model->userLanguage
熱心にロードされ、タイプがModelLang
.
これは次のようになり、うまく機能します。
この特性を含めるだけで、すべてのモデルに対してこのリレーションを自動的に (熱心に) ロードする可能性に苦労しています。
これまでに試したこと
トレイト内でコンストラクターを使用する: 機能しますが、他のトレイトのコンストラクターと衝突する可能性があるため、良い考えではありません。基本的に、次のステートメントを確認します。どのトレイトでもコンストラクターを使用しないでください。
boot-Trait メソッド ( ) を使用しますが、呼び出しまたはメソッド
bootHasTranslation
を実行する具体的なオブジェクトがありません。インスタンス化された雄弁なモデルへのフックが見つかりませんでした。ここで、リレーションを熱心なロードに追加しますload
with
何か案は?私がここで見落としている明らかなものはありますか?
php - Laravel hasMany to Many To One Eloquent
これをLaravelの方法で整理するのはあまり運がありませんでした。そこで、私は 2 つの質問を投げかけます。
私は車を持っていて、その車は多くの機能を持つことができますが、その機能も機能タイプで区切られていることを考えると、その車の機能タイプを区切ってすべての機能を返すにはどうすればよいですか?
4 つのテーブルがあり、listings_features がピボット テーブルです。
- リスティング (id)
- listings_features (listing_id、feature_id)
- listings_features_types (id、タイプ)
- listings_features_values (id、listing_feature_type_id、値)
必要なものを生成する次のコードがありますが、それを使用すると、Laravelエラーが発生します...「文字列のメンバー関数addEagerConstraints()への呼び出し」...そのように呼び出すためです:
私が望む形式でデータを生成するために使用しているコードは(不動ではありません)
どちらが返されますか:
モデルは次のとおりです(非常に基本的なもので、始めたばかりです):
同じ結果セットを達成するためにLaravelモデルの関係を作成するにはどうすればよいですか?または、上記のように呼び出して、エラーの発生を止めるにはどうすればよいですか?
ここまでできたら、ありがとう!
アップデート:
そのままでは機能しませんでした。テーブル名を指定できるように、beensToManyThrough が必要なように感じさせる SQL エラーが発生しました。
ただし、@ Carter Fort から以下の回答として投稿された正確なコードを使用し、 features() メソッドを
また、モデル ListingFeatureValue に追加します
次の出力が得られます。
それは私がいたよりも優れていますが、結果がタイプごとにグループ化され、タイプが添付された各機能ではなく、その中の機能でグループ化されていると便利です. 表示用の解析が難しくなります。これまで助けてくれてありがとう!
更新 2
これらは私のスキーマファイルです:
更新3 以下の回答から変更を加えます(すべてのコードが機能したら投稿します)私が望むものに近づきます。
// .... ]
私が欲しいのは:
php - Laravel:2つのテーブルを結合して、テーブル1から情報を取得し、テーブル2から最初の関連画像を取得します
私は2つのテーブルを1つ持っていてpropertyDetails
、もう1つはpropertyImages
そうです.
ここにモデルがあります
プロパティ詳細
テーブルの移行
プロパティ画像
テーブルの移行
私がやりたいことはprojectsDetails
、テーブル2から最初の関連画像をすべて選択することですpropertyImages
私は試した
そして私の見解では
得た
未定義のプロパティ: Illuminate\Database\Eloquent\Collection::$image
laravel - 同じモデルの hasManyThrough
UserとMessageの2 つのクラスがあります。
したがって、ユーザークラスからユーザーのメッセージへの返信を取得しようとしています
ユーザークラスで
ただし、これはうまくいかないようなので、 hasManyThrough 操作を試しています
固有のテーブルの問題のため、これも機能しません
この操作を実行する最良の方法は何ですか?
raw get を使用する必要がありますか?
ページネーションと順序付け機能も実行したい場合があることを心に留めておいてください
php - Eloquent を使用した laravel の内部結合
私は2つのモデルLeaveApplicationとLeaveDetailsモデルを持っています。私はleaveDetailsモデルで内部結合休暇にリンクします
LeaveApplication モデル
これは LeaveDetails モデルです
を使用してこれにアクセスしようとしますLeaveApplication::with('leaveDetails')->where('leaveDetails.leave_date','2016-10-10')->get()
それは私にエラーを与えます、これは雄弁に内部結合を作成するものではありません。
私も使用whereHas('leaveDetails')
していますが、これは内部結合を使用していません