thinkphp を使用して開発する場合、関連クエリを使用する必要がある状況によく遭遇します。関連クエリを実行するとき、条件は多くの場合注意が必要な点です。
この記事では、thinkphp で関連クエリを実行するときに条件を使用してフィルターする方法を紹介します。
関連付けられたクエリを実行するときは、最初にモデルで関連付けを定義する必要があります。ここでは 1 対 1 の関係を例に挙げます。まず、hasOne アソシエーションを含む User モデルを定義します。
class User extends Model { protected $table = 'users'; public function profile() { return $this->hasOne('Profile'); } }
上記のコードでは、profile という名前のモデルに関連付けられる、profile という名前の hasOne アソシエーションを定義します。 Profile モデルでは、belongsTo 関連付けを定義する必要があります。
class Profile extends Model { protected $table = 'profiles'; public function user() { return $this->belongsTo('User'); } }
上記のコードでは、user という名前のbelongsTo 関連付けを定義し、User という名前のモデルに関連付けます。
関係を定義した後、コントローラーで関連クエリを実行できます。クエリ ステートメントは次のとおりです。
$users = User::with(['profile' => function($query){ $query->where('age', '>=', 18); }])->select();
上記のコードでは、 with メソッドを使用して関連クエリを実行します。このうち、最初のパラメータはクエリしたい関連付けを渡し、2 番目のパラメータはこのクエリに追加の条件付き制限を課すために使用されるコールバック関数です。
上記のコードでは、where メソッドを使用してプロファイル モデルの年齢属性をフィルターし、年齢が 18 以上のレコードのみをクエリしました。
with メソッドでコールバック関数を渡してクエリ条件を制限するだけでなく、関連するクエリを実行するときに連鎖操作条件を実行することもできます。 。たとえば、次のコードは、ユーザー テーブル内の年齢が 18 歳以上のユーザー、およびプロファイル レコード内のアドレスが空ではないレコードに対するクエリを実装します。
$users = User::where('age', '>=', 18) ->with(['profile' => function($query){ $query->where('address', '<>', ''); }]) ->select();
上記のコードでは、まず、where メソッドを使用します。クエリ条件は User モデルに対して制限されます。次に、with メソッドのコールバック関数を使用して、プロファイル モデルのクエリ条件を制限しました。
thinkphp で関連クエリを実行する場合、with メソッドを使用して関連クエリを実行し、コールバック関数またはチェーン操作条件をクエリ結果に渡すことができます。さらに制限され、フィルタリングされます。
もちろん、関連クエリを実行するときは、関連関係の定義、クエリ ステートメントの記述など、その他の詳細にも注意する必要があります。実際の開発プロセスでは、状況に応じて柔軟な運用を行う必要があります。
以上が条件を使用して thinkphp 関連のクエリをフィルタリングする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。