【问题标题】:need to get Tasks where task tags is in $TagArray需要获取任务标签在 $TagArray 中的任务
【发布时间】:2018-10-21 17:31:09
【问题描述】:

大家好,我需要获取所有任务标签名称都在$TagArray 中的任务。我尝试使用我的代码,但当任何任务标签位于 $TagArray 时,它会返回 Tasks。

我的代码

$Tasks = Path::with(['pathtags' => function ($q) use ($TagArray) {
    $q->with(['Tasks'=>function($q) use ($TagArray) { 
        $q->has('tasktags', '>' , 1)->whereHas('tasktags', function ($query) use ($TagArray) {
            $query->whereIn('name',$TagArray);
        })->with('tasktags');
    }]);
}])->first();

此查询检查 $TagArray 中的 Task->Tags 名称,但问题是当 Task->Tags(tasktags) 名称之一在 $TagArray 中时它返回任务 当所有Task->Tags (tasktags) 名称都在$tasktags 中时,我需要返回任务。

$query->whereIn('name',$TagArray);

【问题讨论】:

  • 你能发布你的 ERD 吗?
  • 什么意思?
  • 很难理解这些关系。你能发布模型或数据库设计吗?

标签: php mysql laravel laravel-5


【解决方案1】:

我认为你最好使用 Has Many Through。

 public function tags()
 {
    return $this->hasManyThrough('Path', 'PathTag', 'pathtag_id', 'tag_id');
 }

你想为这个关系获取给定路径的标签,所以:

$path= Path::first();
$path->load(['tags' => function ($q)  use ($TagArray)  {
  $q->whereIn('name',$TagArray);
}]);


$path->tags; 

【讨论】:

  • 找不到类'PathTag'
  • 不,我需要检查是否所有任务标签名称都在 %TagArray
  • 我试过 $posts2 = Path::with(['pathtags' => function ($q) use ($TagArray) { $q->with(['Tasks'=>function($ q) use ($TagArray) { $q->has('tasktags', '>' , 1)->whereHas('tasktags', function ($query) use ($TagArray) { foreach($TagArray as $tag ){ $query->where('name',$TagArray); } })->with('tasktags'); }]); }])->first();但没用
猜你喜欢
  • 1970-01-01
  • 2019-04-19
  • 2017-12-23
  • 1970-01-01
  • 2012-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多