【问题标题】:Searching data of laravel meta table of type metable搜索metable类型的laravel元表数据
【发布时间】:2016-11-10 11:23:05
【问题描述】:

我有 3 个表用户、文章和元数据。我已经根据 laravel 5.3 文档定义了 morphTo() 和 morphToMany(),我可以提取 metas 表中定义的用户或文章的任何特定属性,例如名字或姓氏或坐标。

现在很难编写正确的模型来搜索这些属性,例如搜索任何用户的名字或姓氏或两者兼而有之。

<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 中的整个多态关系对我来说是新的,但我发现并使用了类似的东西:

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 我已按照建议更新了问题
  • @sitechum 如何搜索用户元数据是什么意思?请描述您期望得到的最终结果。
  • 大家晚上好,我仍然需要帮助,我希望问题足够清楚

标签: laravel-5 eloquent metadata meta polymorphic-associations


【解决方案1】:

感谢楼上的投稿,这个不足着实让我更加难以阅读和思考,终于遇到了use(),如下图的函数查询;

public function getResults(Request $request) {
        $keyword = $request->input('query');
        $filterOne = $request->input('minAge');
        $filterTwo = $request->input('maxAge');

        if (isset($keyword)) {
            $query = User::with(['meta' => function ($q) use ($keyword,$filterOne,$filterTwo) {
                $q->where('value', 'LIKE', $keyword)
                    ->whereBetween('value', [$filterOne, $filterTwo]);
            }])->get();
        } else {
            $query = User::with(['meta' => function ($q) use ($filterOne,$filterTwo) {
                $q->whereBetween('value', [$filterOne, $filterTwo]);
            }])->get();
        }

        dd($query);
    }

这给了我正在寻找的结果;虽然不确定在处理大型数据集时对性能的影响,但我想这是我的下一个任务。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-02
    • 2016-08-25
    • 1970-01-01
    • 2018-06-03
    • 2020-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多