SQLServer和Laravel:无效的对象名称错误

时间:2016-12-22 09:10:36

标签: sql-server laravel-5.2

如果我正在使用MySQL,以下代码正在运行。当我切换到MS SQLServer时,我收到错误。我已经启用了pdo sqlsrv驱动程序。我的数据库有一个名为 products 的表,但它显示的对象名称无效。

Product.php(Model)

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    protected $connection = 'sqlsrv';
}
?>

database.php中

'sqlsrv' => [
        'driver'   => 'sqlsrv',
        'host'     => env('DB_EXT_HOST', 'localhost'),
        'database' => env('DB_EXT_DATABASE', 'forge'),
        'username' => env('DB_EXT_USERNAME', 'forge'),
        'password' => env('DB_EXT_PASSWORD', ''),
        'charset'  => 'utf8',
        'prefix'   => '',
    ]

控制器:

<?php

namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Product;
use App\Http\Requests;

class APIController extends Controller
{
    public function index(Request $request)
    {
        $products = Product::paginate(5);
        return response(array(
            'error' => false,
            'products' =>$products->toArray(),
        ),200);
    }
}
?>

输出:

  

SQLSTATE [42S02]:[Microsoft] [SQL Server的ODBC驱动程序11] [SQL Server]无效的对象名称“产品”。 (SQL:从[products]中选择count(*)作为聚合)

2 个答案:

答案 0 :(得分:0)

如果添加正确的架构不起作用,则可能是您的用户的权限问题。我猜你正在使用“forge”用户访问数据库 - 该用户是否对该表有选择权限?

你可能必须运行它才能确定:

GRANT SELECT ON dbo.products TO forge

答案 1 :(得分:0)

我知道我在派对上很晚,但这对其他用户有帮助。

来自documentation该类的复数名称将用作表名,除非明确指定其他名称

因此,在您的情况下,表名products与模型product不同。只需将以下行添加到您的模型中:

protected $table = 'products';

希望这也可以帮助你以及其他人。