私は3つのテーブルのユーザ、記事、メタがあります。私は、laravel 5.3の文書に従ってmorphTo()とmorphToMany()を定義していました。メタ名表に定義されているユーザーまたは記事の特定のプロパティを、firstnameやlastname、coordinateなどの任意のプロパティから取得できます。metable型のララベルメタテーブルのデータを検索
これらのプロパティを検索するための正しいモデルを作成するのが難しくなりました。たとえば、ユーザーの姓や名字、またはその両方を検索することができません。
<u>User table</u>
id. username. password
1. Test. Testpass
<u>article</>
id. Title. Slug
1. My article title. my-article-title
メタ情報テーブル
Id. key. value. metable_id metable_type
1 firstname Ade 1 App\User
2. content. Sample article 1. App\Article
3. lastname. Keon. 1. App\User
Meta.phpは
public function metable() {
return $this->morphTo();
}
User.phpが
public function meta() {
return $this->morphToMany('App\User', 'metable');
}
public function getName() {
$user = User::find($this->id);
$metadata = $user->meta()->whereIn('key', ['firstname', 'lastname']) ;
dd($metadata);
}
Article.phpが抽出抽出抽出
予想通りpublic function meta() {
return $this->morphToMany('App\User', 'metable');
}
のgetName機能が働いていたが、私は
いけない知って参加し、従来のPHP/MySQLのテーブルとは異なり、ユーザメタデータの検索を行う方法を見つけ出すことはできませんどのようにlaravel全体多型の関係があるよう私はJOIする方法を参照するか、その理由カント
public function getSearch() {
return User::with(array('metas' => function($query) {
$query->where('value', $query);
}));
}
または
public function getSearch() {
return User::with('metas')
->whereHas('metas', function($query) {
$query->where('value', '=', $query);
});
}
:私は私に新しいしかし、これらのようなものを発見し、使用しましたnはここlaravel
の表では、上記の貢献のための
public function getResults(Request $request) {
$keyword = $request->input('query');
$filterOne = $request->input('minAge');
$filterTwo = $request->input('maxAge');
$query = User::with(['meta' => function ($q) {
$q->where('value', 'like', $keyword)
->orWhere(function ($q) {
$q->whereBetween('value', [$filterOne,$filtertwo]);
});
}])->get();
dd($query);
}
何を試したのか、何がうまくいかないのかを説明してください。 – TheFallen
データベーススキーマと関係を表示します。 –
@ TheFallen – adeguk