V4n*_*ll4 6 php laravel laravel-5 laravel-5.1
我在Laravel 5.1中设置了全局范围,工作正常.但是在我的一些页面上,我joins使用Eloquent构建器使用MySQL .这会导致一个模棱两可的错误:
Column 'cust_id' in where clause is ambiguous
Run Code Online (Sandbox Code Playgroud)
我不知道如何避免这个问题.我知道我可以使用子查询,但没有其他解决方案吗?
这是我的范围文件:
<?php
namespace App\Scopes;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\ScopeInterface;
use App\Customers;
use DB, Session;
class MultiTenantScope implements ScopeInterface
{
/**
* Create a new filter instance.
*
* @param UsersRoles $roles
* @return void
*/
public function __construct()
{
$this->custId = Session::get('cust_id');
}
/**
* Apply scope on the query.
*
* @param Builder $builder
* @param Model $model
* @return void
*/
public function apply(Builder $builder, Model $model)
{
if($this->custId)
{
$builder->whereCustId($this->custId);
}
else
{
$model = $builder->getModel();
$builder->whereNull($model->getKeyName());
}
}
/**
* Remove scope from the query.
*
* @param Builder $builder
* @param Model $model
* @return void
*/
public function remove(Builder $builder, Model $model)
{
$query = $builder->getQuery();
$query->wheres = collect($query->wheres)->reject(function ($where)
{
return ($where['column'] == 'cust_id');
})->values()->all();
}
}
Run Code Online (Sandbox Code Playgroud)
Ben*_*aar 12
为了消除字段的歧义,您应该将表名添加为前缀:
public function apply(Builder $builder, Model $model)
{
if($this->custId)
{
$fullColumnName = $model->getTable() . ".cust_id";
$builder->where($fullColumnName, $this->custId);
}
else
{
$model = $builder->getModel();
$builder->whereNull($model->getKeyName());
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1224 次 |
| 最近记录: |