php - Laravel 数据库 'Where' 语句中断

标签 php mysql laravel

我在 Laravel 中的 where 语句方面遇到了问题。我用它从数据库获取数据,然后将其推送到实时搜索:

$launchsitesatellite = DB::table('satellites')
    ->orWhere('satname','LIKE','%'.$request->search.'%')
    ->orWhere('norad_cat_id','LIKE','%'.$request->search.'%')

我需要添加此内容来过滤来自数据库的结果:->where('site', $site_code)

我尝试将其添加到上面的 where 语句中,但是当我尝试在输入中键入某些内容时,它破坏了我的实时搜索并导致 500 服务器错误。我可以使用 ->where('site', $site_code) 仅显示数据库中的数据,但不搜索它。

我的问题是:为什么 ->where('site', $site_code) 查询会破坏搜索?您将如何修复它?

编辑:我的 Controller 代码段:

if ($request->ajax()) 
{
    $output="";
    $launchsitesatellite = DB::table('satellites')
        ->orWhere('satname','LIKE','%'.$request->search.'%')
        ->orWhere('norad_cat_id','LIKE','%'.$request->search.'%')
    if ($launchsitesatellite)
    {
        foreach ($launchsitesatellite as $key => $launchsitesatellites) {
        $output .='<tr>'.
                '<td>'.$launchsitesatellites->satname.'</td>'.
                '<td>'.$launchsitesatellites->norad_cat_id.'</td>'.
                '<td>'.$launchsitesatellites->object_type.'</td>'.
                '</tr>';
        }
    }

    return $output;
}
else {
    $launchsitesatellite = DB::table('satellites')->where('site', $site_code)->get();

    return view('pages/launchsite-filter', compact('launchsites', 'launchsitesatellite'));        
}
}

最佳答案

让我们看一下 if block 中的代码:

if ($request->ajax()) 
{
    $output="";
    $launchsitesatellite = DB::table('satellites')
        ->orWhere('satname','LIKE','%'.$request->search.'%')
        ->orWhere('norad_cat_id','LIKE','%'.$request->search.'%')
    if ($launchsitesatellite)
    {
        foreach ($launchsitesatellite as $key => $launchsitesatellites) {
        $output .='<tr>'.
                '<td>'.$launchsitesatellites->satname.'</td>'.
                '<td>'.$launchsitesatellites->norad_cat_id.'</td>'.
                '<td>'.$launchsitesatellites->object_type.'</td>'.
                '</tr>';
        }
    }

    return $output;
}

您遇到的错误(提到 here )是

Undefined property: Illuminate\Database\MySqlConnection::$satname

当您定义 $launchsitesatellite 时,您将在 SQL 语句中添加 where 子句,但永远不会启动它。

相反,请执行以下操作:

$launchsitesatellite = DB::table('satellites')
    ->orWhere('satname', 'LIKE', '%' . $request->search . '%')
    ->orWhere('norad_cat_id', 'LIKE', '%' . $request->search . '%')
    ->get();

关于php - Laravel 数据库 'Where' 语句中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45446968/

相关文章:

mysql - 对包含数十万个名字/姓氏/地址/出生日期的列表进行重复数据删除

Laravel 4.1 : proper way to retrieve all morphedBy relations?

php - Composer update/create-project/install - HTTP 请求失败

php - 如何在PHP中重用sql查询结果?

php - MySQL:通过创建的随机组增加ID

laravel - 如何从 Laravel 中的作业 ID 获取排队的作业?

laravel - 如何更改laravel中的日期语言?

php - PDO/Codeigniter 准备时出错

php - 如何在 WooCommerce 评论表单上添加 "Review title"字段?

php - SQL 和 PHP 唯一编号