Laravel 5.1从控制器创建表 [英] Laravel 5.1 Create table from controller

查看:64
本文介绍了Laravel 5.1从控制器创建表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这种情况:我有一个用户列表,该用户与公司关联,而那些公司与组关联.每个用户都可以创建一个与该用户以及该用户所属的公司关联的客户.目前,我所有的客户都在同一个数据库表中.但是我想为每个公司都有一个客户表.

This is the situation: I have a list of user, this user are associate to a company and those companies are associate to a group. Each user can create a client who is associate to the user and the company in which the user belong. For the moment, all my client are in the same database table. But I want to have a clients table for each company.

我正在寻找创建公司时创建客户表的正确方法.例如,当我创建公司A时,控制器在公司表中添加行A,然后检索company_id并创建clients_id表.现在,我尝试了这个:

I'm looking for the right way to create a clients table when i create a company. Example, when I create company A, the controller add the row A in the companies table then retrieve the company_id and create clients_id table. For now, I tried this:

    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;

但是我遇到了这个错误:

But I got this error :

Class 'App\Http\Controllers\Admin\Schema' not found

最后,我正试图为我的错误找到一个问题,我想知道是否存在使它变得更容易的选项,或者是否有其他建议以更好的方式做到这一点.

Finally, I am trying to find an issue for my error and I want to know if there is an option to make it easier or any other suggestion to do it in a better way.

谢谢!

推荐答案

有人提出了这一点,并删除了他的评论:

Some one put this and deleted his comment:

use Illuminate\Support\Facades\Schema as Schema;

@Tim Lewis也这样说.那解决了我的问题.但是当我测试它时,我面临另一个问题.我没有创建模型,所以无法使用

@Tim Lewis said it too. That solved my problem. But when I tested it, I faced another problem. I was not creating a model, so I was unable to add row using

$client = new Client;

这就是我所做的:

首先,我将功能storeCompany更改为此:

Firstly, I change the function storeCompany to this:

    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文件:

Secondly, I created this .bat file:

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迁移.

So now, when I add a new Company, the server get this company_id then modify the .bat file who copy base migration and model to match the new company. After this it launch the php artisan migrate.

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

Now, users can add data to the client/transaction table of their company without interacting with other companies tables.

也许我做这件事是错的...但是它可以满足我的需要.如果您有任何建议,请说/写!

Maybe I'm wrong doing this... But it work to do what I need. If you have any suggest, say/write it!

这篇关于Laravel 5.1从控制器创建表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆