PHP Laravel使用多个输入中的多个关键字搜索多个表

时间:2017-02-01 09:33:08

标签: php laravel

我在db中有两个表," deal"和" deals_meta"用外键连接它们。 在"交易"表格我有关于交易的一般信息,如标题,描述,类别等,以及" deals_meta"我还有其他具体细节,如位置,卧室数量,价格,预订日期等。

我有一个包含多个字段,标题,详细信息,预订日期,价格范围等的表单。

我的问题是我无法根据搜索查询从db检索交易。

我用来检索查询的代码如下所示:

$deals = Deals::where('deals_providers', $provider)->where('deal_types', $dealType)->with('meta')
            ->where(function ($query) use ($terms, $dealType) {
                $query->whereHas('meta', function ($query) use ($terms, $dealType) {
                    $search = $query->where('deal_type', 'like', '%' . $dealType . '%');
                    if ($terms['location']) {
                        $search = $query->orWhere('location', 'like', '%' . $terms['location'] . '%');
                    }
                    if ($terms['price_from']) {
                        $search = $query->orWhere('price', '>', '%' . $terms['price_from'] . '%');
                    }
                    if ($terms['price_to']) {
                        $search = $query->orWhere('price', '<', '%' . $terms['price_to'] . '%');
                    }
                    if ($terms['departs_from']) {
                        $search = $query->orWhere('departs_from', 'like', '%' . $terms['departs_from'] . '%');
                    }
                    if ($terms['duration']) {
                        $search = $query->orWhere('duration', 'like', '%' . $terms['duration'] . '%');
                    }
                    if ($terms['available_start']) {
                        $search = $query->orWHere('available_start', 'like', '%' . $terms['available_start'] . '%');
                    }
                    if ($terms['available_end']) {
                        $search = $query->orWhere('available_end', 'like', '%' . $terms['available_end'] . '%');
                    }

                    return $search;
                });
                if ($terms['title']) {
                    $query->orWhere('title', 'like', '%' . $terms['title'] . '%');
                }
                if ($terms['details']) {
                    $query->orWhere('details', 'like', '%' . $terms['details'], '%');
                }
            })->get();

        Debug::data($deals);

如果我搜索标题或详细信息,它只返回具有该标题或包含该详细信息的交易,但如果我搜索位置或任何其他元相关术语,则返回数据库中的所有交易结果。 我做错了什么,或者我如何才能进行核心搜索?

谢谢!

1 个答案:

答案 0 :(得分:0)

解决!

这是适合我案例的代码!

func getAutoIncremenet() -> Int64   {
    let url = self.objectID.uriRepresentation()
    let urlString = url.absoluteString
    if let pN = urlString.components(separatedBy: "/").last {
        let numberPart = pN.replacingOccurrences(of: "p", with: "")
        if let number = Int64(numberPart) {
            return number
        }
    }
    return 0
}