【问题标题】:Laravel 5.1 Create table from controllerLaravel 5.1 从控制器创建表
【发布时间】: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


【解决方案1】:

有人放了这个并删除了他的评论:

use Illuminate\Support\Facades\Schema as Schema;

@Tim Lewis 也说过。这解决了我的问题。但是当我测试它时,我遇到了另一个问题。我没有创建模型,因此无法使用

添加行
$client = new Client;

这就是我所做的:

首先,我将函数 storeCompany 更改为:

    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 = DB::table('companys')->where('company_name',$company->company_name)->first();
    $company_id = $company -> id;

    Log::info('Lancement de la création des tables @ ' . \Carbon\Carbon::now());
    for ($i=1; $i <6; $i++) {
        if ($i == 1 ) {$out = shell_exec('cd C:\xampp\htdocs\site && cscript replace.vbs "C:\xampp\htdocs\site\lastaction\newCompanyTable.bat" "D0" "D'.$company_id.'"');}
        if ($i == 2 ) {$out = shell_exec('cd C:\xampp\htdocs\site && cscript replace.vbs "C:\xampp\htdocs\site\lastaction\newCompanyTable.bat" "d0" "d'.$company_id.'"');}
        if ($i == 3 ) {$out = shell_exec('C:\xampp\htdocs\site\lastaction\newCompanyTable.bat');}
        if ($i == 4 ) {$out = shell_exec('cd C:\xampp\htdocs\site\lastaction && php artisan migrate');}
        if ($i == 5 ) {$out = shell_exec('cd C:\xampp\htdocs\site && cscript replace.vbs "C:\xampp\htdocs\site\lastaction\newCompanyTable.bat" "D'.$company_id.'" "D0"');}
        if ($i == 6 ) {$out = shell_exec('cd C:\xampp\htdocs\site && cscript replace.vbs "C:\xampp\htdocs\site\lastaction\newCompanyTable.bat" "d'.$company_id.'" "d0"');}
        Log::info($out);
    }
    return redirect('admin/managecompany');
}

其次,我创建了这个 .bat 文件:

cd C:\xampp\htdocs\site\lastaction\app && copy "Client.php" "D0client.php"
cd C:\xampp\htdocs\site\lastaction\app && copy "Transaction.php" "D0transaction.php"
cd C:\xampp\htdocs\site\lastaction\app && copy "Job.php" "D0job.php"
cd C:\xampp\htdocs\site\lastaction\app && copy "Log.php" "D0log.php"
cd C:\xampp\htdocs\site\lastaction\database\migrations && copy "2015_11_03_153725_create_clients_table.php" "2015_11_03_153725_create_d0clients_table.php"
cd C:\xampp\htdocs\site\lastaction\database\migrations && copy "2015_11_03_185333_create_transactions_table.php" "2015_11_03_185333_create_d0transactions_table.php"
cd C:\xampp\htdocs\site\lastaction\database\migrations && copy "2015_12_01_024822_create_jobs_table.php" "2015_12_01_024822_create_d0jobs_table.php"
cd C:\xampp\htdocs\site\lastaction\database\migrations && copy "2015_12_01_024854_create_logs_table.php" "2015_12_01_024854_create_d0logs_table.php"
cd C:\xampp\htdocs\site && cscript replace.vbs "C:\xampp\htdocs\site\lastaction\app\d0client.php" "Client" "D0client"
cd C:\xampp\htdocs\site && cscript replace.vbs "C:\xampp\htdocs\site\lastaction\app\d0transaction.php" "Transaction" "D0transaction"
cd C:\xampp\htdocs\site && cscript replace.vbs "C:\xampp\htdocs\site\lastaction\app\d0job.php" "Job" "D0job"
cd C:\xampp\htdocs\site && cscript replace.vbs "C:\xampp\htdocs\site\lastaction\app\d0log.php" "Log" "D0log"
cd C:\xampp\htdocs\site && cscript replace.vbs "C:\xampp\htdocs\site\lastaction\app\d0client.php" "clients" "d0clients"
cd C:\xampp\htdocs\site && cscript replace.vbs "C:\xampp\htdocs\site\lastaction\app\d0transaction.php" "transactions" "d0transactions"
cd C:\xampp\htdocs\site && cscript replace.vbs "C:\xampp\htdocs\site\lastaction\app\d0job.php" "jobs" "d0jobs"
cd C:\xampp\htdocs\site && cscript replace.vbs "C:\xampp\htdocs\site\lastaction\app\d0log.php" "logs" "d0logs"
cd C:\xampp\htdocs\site && cscript replace.vbs "C:\xampp\htdocs\site\lastaction\database\migrations\2015_11_03_153725_create_d0clients_table.php" "clients" "d0clients"
cd C:\xampp\htdocs\site && cscript replace.vbs "C:\xampp\htdocs\site\lastaction\database\migrations\2015_11_03_185333_create_d0transactions_table.php" "transactions" "d0transactions"
cd C:\xampp\htdocs\site && cscript replace.vbs "C:\xampp\htdocs\site\lastaction\database\migrations\2015_12_01_024822_create_d0jobs_table.php" "jobs" "d0jobs"
cd C:\xampp\htdocs\site && cscript replace.vbs "C:\xampp\htdocs\site\lastaction\database\migrations\2015_12_01_024854_create_d0logs_table.php" "logs" "d0logs"
cd C:\xampp\htdocs\site && cscript replace.vbs "C:\xampp\htdocs\site\lastaction\database\migrations\2015_11_03_153725_create_d0clients_table.php" "CreateClientsTable" "CreateD0clientsTable"
cd C:\xampp\htdocs\site && cscript replace.vbs "C:\xampp\htdocs\site\lastaction\database\migrations\2015_11_03_185333_create_d0transactions_table.php" "CreateTransactionsTable" "CreateD0transactionsTable"
cd C:\xampp\htdocs\site && cscript replace.vbs "C:\xampp\htdocs\site\lastaction\database\migrations\2015_12_01_024822_create_d0jobs_table.php" "CreateJobsTable" "CreateD0jobsTable"
cd C:\xampp\htdocs\site && cscript replace.vbs "C:\xampp\htdocs\site\lastaction\database\migrations\2015_12_01_024854_create_d0logs_table.php" "CreateLogsTable" "CreateD0logsTable"
cd C:\xampp\htdocs\site\lastaction && composer dump

所以现在,当我添加一个新公司时,服务器获取这个 company_id 然后修改复制基本迁移和模型的 .bat 文件以匹配新公司。在此之后它会启动 php artisan migrate。

现在,用户可以将数据添加到其公司的客户/交易表中,而无需与其他公司表进行交互。

也许我这样做是错误的......但它可以满足我的需要。如果你有什么建议,说/写吧!

【讨论】:

    猜你喜欢
    • 2016-04-14
    • 2016-07-21
    • 1970-01-01
    • 2016-01-31
    • 1970-01-01
    • 1970-01-01
    • 2016-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多