【发布时间】:2015-12-01 11:56:15
【问题描述】:
情况是这样的:我有一个用户列表,这个用户关联到一个公司,而这些公司关联到一个组。每个用户都可以创建一个与用户和用户所属公司相关联的客户端。目前,我所有的客户都在同一个数据库表中。但我想为每家公司创建一个客户表。
我正在寻找创建公司时创建客户表的正确方法。例如,当我创建公司 A 时,控制器在公司表中添加行 A,然后检索 company_id 并创建 clients_id 表。现在,我尝试了这个:
public function storeCompany(Request $request)
{
$company= new Company;
$company-> group_id = Request::get('group_id');
$company-> company_name = Request::get('company_name');
$company-> phone = Request::get('phone');
$company-> save();
$company_id = DB::table('companies')->where('company_name',$company->company_name)->first();
Schema::create('clients_'.$company_id, function($table) {
$table->increments('id');
$table->string('columntest');
});
return redirect('admin/managecompany');
}
我添加了这个:
use Illuminate\Database\Schema\Blueprint;
但我收到了这个错误:
Class 'App\Http\Controllers\Admin\Schema' not found
最后,我正在尝试为我的错误找到一个问题,我想知道是否有一个选项可以让它变得更容易,或者有任何其他建议可以更好地做到这一点。
谢谢!
【问题讨论】:
-
你真的不希望每个公司都有一张桌子。
-
\Schema应该可以解决该错误。命名空间问题。话虽这么说,听听这里给出的建议......每家公司一张桌子似乎不是一个好主意。 -
你能解释一下为什么吗?我的理由是:同一个客户可以添加到许多公司。但是一家公司不能两次添加同一个客户。一个客户端可以关联多个事务。使用每个公司的重复表,我可以使来自客户的列电子邮件唯一,并且不允许公司 A 的用户两次添加该客户并提醒他的主管。但是B公司的用户可以添加。
-
也许我错了,但我想知道为什么以及有什么替代方案?
-
@ElieMorin 这样做的“正确”方法是有一个将客户连接到公司的数据透视表。所以你将有一个
client表、一个company表和一个company_clients表。company_clients表将包含将company_id连接到client_id的条目。这是关于这种关系的 Laravel 文档:laravel.com/docs/5.1/eloquent-relationships#has-many-through
标签: php mysql laravel-5.1