問題タブ [containable]
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 - 複数のレベルでのCakePHP注文クエリの結果
Containable動作を使用して、コメントのリストを取得しています(BelongsTo Post、これはQuestionに属し、Question hasMany Post、およびPost hasMany Comments;これらはすべてUsersに属します)。
上記のコメントのセクションをコメントアウトすると、機能します。これは予想されることだと思いますが、私が欲しいのは、見つかったすべての投稿であり、それらが属する「ユーザー」の「作成済み」フィールドの順に並べ替える必要があります。CakePHPでこのより深いレベルのソートを達成するにはどうすればよいですか?私はいつも「警告(512):SQLエラー:1054:不明な列'User.created'in'orderclause'」を受け取ります
ご協力いただきありがとうございます!
performance - CakePHP - AppModel で recursive を -1 に設定し、必要に応じて Containable 動作を使用します
CakePhp を使用する場合、AppModel クラスで recursive = -1 を設定し、より深いデータ関係が必要な場合はいつでも Containable Behavior を使用することをお勧めしますか?
これにより、アプリケーションがデータベース関連のパフォーマンスの低下を回避できる可能性が最も高くなると思いますが、その方法論は適切ですか?
ありがとう
レオ
sql - CakePHP は同じクエリを繰り返します
私はモデル構造を持っています。
このコードでデータをフェッチし、containable を使用して、関連付けられたモデルをより深くフィルター処理できるようにします。
データ構造は問題なく返されますが、データセットに基づいて、時には何百ものクエリが連続して、複数の繰り返しクエリを取得します。
基本的に、データ構造を構築するとき、Cake は行ごとに mysql からデータを何度も取得します。数千行のデータセットがあり、パフォーマンスに影響を与えると感じています。結果をキャッシュし、同じクエリを繰り返さないようにすることは可能ですか?
php - CakePHP:このfind呼び出しを変更して、関連付けられたテーブルに存在しないすべてのレコードを含めるにはどうすればよいですか?
次の関係を持つテーブルがいくつかあります。
会社には多くの仕事、従業員、トラック、ユーザーがいます
テーブルのモデル、コントローラー、およびビューとともに、すべての外部キーを適切に設定しました。
元々、Jobsテーブルには「assigned」と呼ばれるブールフィールドがありました。次の検索操作(JobsControllerから)は、すべての従業員、すべてのトラック、および割り当てられておらず、単一の会社の特定の日に該当するすべてのジョブを正常に返します(包含可能な動作を利用してユーザーを返すことはありません)。
さて、このコードを書いたので、私は仕事の割り当てでもっと多くのことをすることにしました。そこで、belongsToTruckとbelongsToJobという新しいモデル「Assignment」を作成しました。トラックモデルとジョブモデルの両方にhasMany割り当てを追加しました。割り当てテーブルには、他のいくつかの割り当てフィールドとともに、両方の外部キーがあります。
今、私は上記と同じ情報を取得しようとしていますが、ジョブテーブルから割り当てられたフィールドをチェックする代わりに、割り当てテーブルをチェックして、ジョブがそこに存在しないことを確認したいと思います。mysqlエラー(クックブックによる)が原因で、findメソッドの「結合」機能を使用する場合、包含可能な動作を使用できなくなります。ただし、次のクエリは、異なる日に分類される場合でも、すべてのジョブを返します。
編集:結局のところ、私のクエリは機能しますが、すべての割り当てが返される原因となるデータに問題がありました。
cakephp - 封じ込め可能な振る舞いは深さ3から戻らない-CakePHP
私はCakePHP1.2.6を使用しており、次の関係があります。
ショーケースHABTMユーザーbelongsToGalleryitemhasOne Image
Showcaseに関連するすべてのデータを取得しようとしています。そのため、Galleryitem->Imageを使用してすべてのユーザーも取得しています。次のクエリを使用します。
これにより、の配列が返され、空の配列が返さGalleryitem
れるため、Image
レコードはまったく返されません。私が以下を試してみると:
私はここでいくつかのデータを取得しますImage
。ですから、ここでは深さが役割を果たしているようです。
頭に浮かんだ他の要因は、との間の関係belongsTo
でした。User
Galleryitem
クエリが深さ3のデータを返さない原因は何ですか?
更新
ショーケースリレーションのセットは、私のプロジェクトでは、上記で説明したよりもはるかに分岐しています。他のすべてのブランチは適切に表示されます。したがって、このブランチの特定の関係に関係していると思いますUser belongsTo Galleryitem
。
他のブランチにはこれとまったく同じGalleryitem hasOne Image
関係のセットが含まれているため、さらに奇妙です。
search - 包含可能な動作を使用して第3レベルで検索を実装するにはどうすればよいですか
私はケーキPHPアプリケーションを開発しました。
これには、学生、プレースメント、バッチ、会社などのテーブルがあります
プレースメントテーブルにはstudent_id、company_idがあり、studentsテーブルにはbatch_id列があります。
プレースメントのインデックスページで、jqグリッドを適用しました。これがスクリーンショットです。
学生、会社、バッチで検索したいです。このために、配置コントローラーのインデックス関数内で包含可能な動作を使用しました。
グリッドには、学生名、会社名、バッチ名(該当する場合)が正しく入力されます。学生名と会社名で検索した場合も検索は正常に機能しますが、バッチ名で検索しようとすると、次のエラーが発生します。
クエリからわかるように、学生とバッチの関係は機能していないと思います。
なぜそのように振る舞うのか理解できません。
これについて私を助けてください。
ありがとう
cakephp - CakePHP 1.3.4 で「フィールド」が使用されている場合、Containable は属している関係で JOIN に失敗します
(CakePHP バージョン 1.3.4)
Contact モデルと Account および Test モデルの間に次の関連付けがあります。
次のクエリは問題なく機能します。
しかし、「フィールド」が導入されるとすぐに、Account との belongsTo 関連付けは壊れますが、Test との hasMany 関連付けは問題ありません。
他の誰かがこの問題を抱えているようですか?
php - CakePHPの包含可能ファイルは適切な方法でフィルタリングされません
Cakephpマニュアルの例、http: //book.cakephp.org/view/1323/Containable#Containing-deeper-associations-1325のように、アソシエーションモデルの条件を介してモデルからデータをフェッチする必要があります。
私は持っています:
モデル言語:
そして協会、ModelTranslation
私がする時:
1つだけでなく、すべての言語を受け取ります(LanguageTranslationのidは一意であるため)。結果は1つである必要があります!
だから、
結果は次のとおりです。
id = 1の言語だけをキャッチしないのはなぜですか?
cakephp - CakePHP の検索可能な動作の結果を取得して、より深い関連付けを含める
私は、CakePHP 1.3.5 の検索可能な動作と包含可能な動作を使用して、指定されたモデルと関連するモデル (記事の所属ユーザー)の検索結果を返そうとしています。
検索可能な動作をしばらく無視して、次のfind()呼び出し:
次の SQL クエリを実行します。
次の配列を返します。
これはまさに期待されていることです。ただし、次のsearch()の呼び出し:
次の SQL クエリを実行します。
そして、この配列を返します:
search() メソッドを見ると、 が返されてい$this->SearchIndex->find('all', $findOptions);
ます。$findOptionsには以下が含まれます。
$this->SearchIndex->Article->belongsTo['User']
SearchableBehavior 内では、search() メソッド内での find() の呼び出しの直前と直後に存在し、無傷であるため、関連付けが途中で失われることはありません。
search() の呼び出しは、次の 'contain' のすべての値に対してまったく同じものを返します。
私は何か間違ったことをしていますか?CakePHP のドキュメントで指示されているのと同じ形式を使用していると思いますが、関連するデータで検索結果を取得するために何か特別なことをしなければならないことを示唆するものはオンラインで見つかりませんでした。
find() への追加の呼び出しを使用してユーザーを検索するだけで、必要な結果を簡単に達成できることはわかっていますが、収容可能な動作を想定どおりに機能させ、不要な余分なデータベースクエリを削減したいと考えています。