如何在Laravel中构建查询

时间:2017-08-16 06:57:36

标签: php sql-server laravel

我是laravel的新手,在了解查询构建器的工作原理方面存在一些问题。

我创建了一个laravel项目并将其成功连接到sqlsrv。现在我想从数据库中检索数据。

首先,只有yAxes: [{ ticks: { display: false; }, 中没有模型才能理解。

wep.php

这样可以显示所有数据库行。

现在我想用Route::get('/tasks', function () { $tasks = DB::table('WebShops')->get(); dd($tasks); }); 命令过滤行,我收到错误:

find
  

SQLSTATE [42S22]:[Microsoft] [SQL Server的ODBC驱动程序11] [SQL   服务器]   列名“id”无效。 (SQL:从顶部选择前1 *   [WebShops]其中[id] = 1)

这很令人困惑,因为我分配了Route::get('/tasks/{ShopID}', function($ShopID){ $task = DB::table('WebShops')->find($ShopID); dd($task); }); ,现在我收到了搜索ShopID的错误。为什么?

我也尝试了这个:

id

这向我展示了一个我不太了解的数据。

enter image description here

我的数据库看起来像这样: enter image description here

3 个答案:

答案 0 :(得分:5)

代码

Route::get('/tasks/{ShopID}', function($ShopID){
    $task = DB::table('WebShops')->find($ShopID);
    dd($task);
});

您是否尝试查找 字段等于$ShopID值的行?

Laravel不知道。因此,它假设您将字段id作为主键。由于您没有这样的字段,根据您的表格结构,您有错误。

根据手册,您可以使用以下命令重新定义主键:

public $primarykey = 'ShopID';

模型文件中。

在第二次尝试中,要接收记录集合 - 添加get()

Route::get('/tasks/{ShopID}', function($ShopID){
    $task = DB::table('WebShops')->where('ShopID', $ShopID)->get();
    dd($task);
});

答案 1 :(得分:3)

如果您使用" ShopID"默认情况下,查找表中的列ID作为主键,您必须在模型中定义,如

protected $primaryKey = 'ShopID';

之后它正在工作

$task = DB::table('WebShops')->find($ShopID);

答案 2 :(得分:0)

由于您是Laravel的新手,因此这是一个开始构建模型而不是使用查询构建器的好机会。

class WebShop extends Model {
     //You need this because by convention Laravel assumes table names are snake_cased (it would look for web_shops)
     protected $table = "WebShops"; 

     // You need this because by convention the primary key is called id.
     protected $primaryKey = 'ShopID';

}

然后以下代码将起作用:

$shop = WebShop::find($id);

Laravel's Eloquent是一个很好的阅读更多信息。