带有变量的 Laravel 模型表名
Posted
技术标签:
【中文标题】带有变量的 Laravel 模型表名【英文标题】:Laravel Model's table name with variable 【发布时间】:2016-03-05 20:21:08 【问题描述】:我想根据哪个用户是 Auth 来更改表名。
为什么?因为当我添加一个dealer时,我为这个dealer创建了一个数据库客户端,数据的名字是d.$dealer_id.clients。因此,用户需要将客户添加到与自己的经销商关联的表中。
我试过 setTable() :
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Auth;
class Client extends Model
public function setTable($table)
$this->table = 'd1clients';
return $this;
protected $fillable = ['dealer_id', 'user_id', 'type', 'first_name', 'last_name', 'phone', 'cellphone', 'email', 'stock', 'source', 'civic', 'road', 'city', 'province', 'country', 'postal_code', 'birth_date', 'driving_liscence'];
但它不会将客户端保存到表中。 还有这个:
'diclients'
应该是这样的:
'd'.Auth::user()->dealer_id.'clients'
这个东西我也试过了:
$globalDealerId = Auth::user()->dealer_id;
protected $table = 'd'.$globalDealerId.'clients';
protected $fillable = ['dealer_id', 'user_id', 'type', 'first_name', 'last_name', 'phone', 'cellphone', 'email', 'stock', 'source', 'civic', 'road', 'city', 'province', 'country', 'postal_code', 'birth_date', 'driving_liscence'];
文档说setTable应该可以工作,但我不知道我做错了什么......
【问题讨论】:
这个$this->table = 'd1clients';
应该是$this->table = $table;
吗?然后运行setTable($dealer_id);
您遇到了什么错误?你能看看 eloquent 的查询吗?
我正在尝试查找此查询。但我不知道在哪里可以找到它。
有问题,我检索了查询,唯一破坏这一切的部分是:SQL: insert into "clients"
。所以 setTable() 根本不起作用......它仍然是主表名......
【参考方案1】:
我发现了问题。它是如何工作的:
模型需要有一个功能:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Client extends Model
public function setTable($table)
$this->table = $table;
return $this;
protected $fillable = ['dealer_id', 'user_id', 'type', 'first_name', 'last_name', 'phone', 'cellphone', 'email', 'stock', 'source', 'civic', 'road', 'city', 'province', 'country', 'postal_code', 'birth_date', 'driving_liscence'];
重要的是这个:
public function setTable($table)
$this->table = $table;
return $this;
然后,我去添加客户端的地方,在这种情况下,客户端被添加到控制器内的数据库中。所以你去吧,你这样做:
public function store(Request $request)
$client = new Client;
$client -> setTable('d'.Auth::user()->id.'clients');
$client -> dealer_id = Auth::user()->dealer_id;
$client -> user_id = Auth::user()->id;
$client -> type = Request::get('type');
$client -> first_name = Request::get('first_name');
$client -> last_name = Request::get('last_name');
$client -> phone = Request::get('phone');
$client -> cellphone = Request::get('cellphone');
$client -> email = Request::get('email');
$client -> city = Request::get('city');
$client -> stock = Request::get('stock');
$client -> source = Request::get('source');
$client -> save();
重要的是这一行:
$client -> setTable('d'.Auth::user()->id.'clients');
不要忘记开头的命名空间:
use DB;
现在,属于 A 公司的用户 A 会将客户添加到 daclients 表中。 B公司的用户B将客户端添加到dbclients表中。
特别感谢@amir bar 帮助我处理查询日志。 感谢这个问题:model - Update the table name at runtime not working - laravel Eloquent ORM
【讨论】:
以上是关于带有变量的 Laravel 模型表名的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Laravel 中使用带有变量的 create 方法