Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php pivot表上的雄辩或查询_Php_Mysql_Laravel_Laravel 4_Eloquent - Fatal编程技术网

Php pivot表上的雄辩或查询

Php pivot表上的雄辩或查询,php,mysql,laravel,laravel-4,eloquent,Php,Mysql,Laravel,Laravel 4,Eloquent,我有这两种型号 Track id name artist_id Artist id name class Song extends \Eloquent{ public function artist(){ return $this->hasOne('Artist','id', 'artist_id'); } } class Artist extends \Eloquent{ public function songs(

我有这两种型号

Track
   id
   name
   artist_id

Artist
   id
   name


class Song extends \Eloquent{
    public function artist(){
       return $this->hasOne('Artist','id', 'artist_id');
   }
}
class Artist extends \Eloquent{
    public function songs(){
        return $this->hasMany('Song', 'artist_id', 'id');
   }
}
现在我想实现一个搜索,搜索词是“happy pharrel”。 我很清楚,我必须搜索歌曲名为“happy”或艺术家名为“happy”的歌曲和歌曲名为“pharrel”或艺术家名为“pharrel”的歌曲


现在,我想知道如何使用对song表和Artister表的条件进行这样的查询?

您的代码显示您已经指定了表/类之间的关系——这很好,但我认为在搜索的情况下它不一定有帮助。这是一种保持语法整洁的好方法,也可以用于,但最好为需要搜索不同表上不同列的搜索词编写一个新的查询

我是这样想的,在用户提交搜索时调用的控制器方法中:

$keywords = explode(' ', Input::get('search'));

$results = Song::join('artists', 'songs.artist_id', '=', 'artists.id')
               ->whereIn('artists.name', $keywords)
               ->orWhereIn('songs.name', $keywords)
               ->get();

这相当简单,但应该足以让您开始。

正如tbuteler回答的那样,这是将结果发送到数据库查询的最快方法

foreach($keywords as $p){
    $songs->where(function($query) use($p){
        $query->where('artists.name',"like", "%".$p."%")
              ->orWhere('songs.name', "like", "%".$p."%");
    });
}
如果不执行where(函数($query){…},则有一个查询包含多个or,但每个“or”部分之间的连接缺失


也许这有助于以后的其他人

您需要在表之间创建联接以执行搜索查询。是的,通过快速加载和保持代码整洁的简单方法,这非常好。我只是认为这也可以用于搜索不同的属性。您发布的解决方案不能正常工作,如果有人也这样做,我将在另一个答案中发布它遇到:)