У меня есть 3 пользователя, статьи и метасты. Я определил morphTo() и morphToMany() в соответствии с документом laravel 5.3 doc, и я могу вытащить любое конкретное свойство пользователя или статьи, определенных в таблице метаданных, таких как имя или фамилия или координата.Поиск данных метаданных laravel типа metable
Теперь у меня возникают трудности с написанием правильной модели для поиска этих свойств, например, для поиска имени или фамилии любого пользователя или обоих.
<u>User table</u>
id. username. password
1. Test. Testpass
<u>article</>
id. Title. Slug
1. My article title. my-article-title
Metas стол
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/таблиц тузды присоединяется
Dont знает, как в целом полиморфные отношения в Laravel является ново для меня, но я нашел и использовал что-то вроде этих:
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);
});
}
Я не могу видеть, или причина, как дзёи п таблица в 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 Я обновил d вопрос, как советовал – adeguk