Laravel 插入 2 个表

Posted

技术标签:

【中文标题】Laravel 插入 2 个表【英文标题】:Laravel inserting into 2 tables 【发布时间】:2016-10-26 17:07:48 【问题描述】:

我有两个表usertn_user,表user 是一个包含登录信息的表,我是通过https://laravel.com/ 的教程制作的,所以基本上它是自动创建的,而tn_user 是一个我自己做的桌子

用户表 万一你看不到属性是idnameemailpassword,那么重要的事情,emailpassword在这个表中是用来登录的

TN_USER 表 属性是cn_idcv_namecv_emailcn_phonecv_positioncv_addresscv_countrycv_usernamecv_passwordcv_privileges,这些是重要的p>

根据下面的表格,我想将usernamepassword 插入到表user 中,其余的插入到表tn_user 中,我该怎么做?我对 laravel 很陌生,所以不太了解如何,通常我使用 CI

UserController.php 这是我用来插入数据的代码 我使用 json 响应来解析数据,不太确定如何将数据插入到 2 个表中,这里没有什么帮助

public function createOrEdit()
    //get current user
    $currentUserId = Auth::user()->id;

    $isUpdate = false;
    $id = Input::get('id');
    $user = new UserCompany;
    if($id != "")
        $user = UserCompany::where('cn_id', '=', $id)->firstOrFail();
        $user->cv_updated_by = $currentUserId;
        $user->cv_updated_at = Carbon::now();
        $isUpdate = true;
    else
        $user->cv_created_by = $currentUserId;
        $user->cv_created_at = Carbon::now();
    
    $user->cv_name = Input::get('name');
    $user->cv_position = Input::get('position');
    $user->cv_email = Input::get('email');
    $user->cn_phone = Input::get('phone');
    $user->cv_address = Input::get('address');
    $user->cv_username = Input::get('username');
    $user->cv_password = Input::get('password');
    $user->cv_country = Input::get('country');

    if($isUpdate)
        UserCompany::where('cn_id','=',$id)->update(['cv_updated_by' => $user->cv_updated_by,
            'cv_updated_at' => $user->cv_updated_at,
            'cv_name' => $user->cv_name,
            'cv_position' => $user->cv_position,
            'cv_email' => $user->cv_email,
            'cn_phone' => $user->cn_phone,
            'cv_country' => $user->cv_country,
            'cv_username' => $user->cv_username,
            'cv_password' => $user->cv_password,
            'cv_address' => $user->cv_address]);

    else
        $user->save();
    

    $returnedData = UserCompany::all();

    $response = array(
            'content' => $returnedData,
            'status' => 'success',
        );

    return Response::json($response);

UserCompany.php 是我的模型,但由于我是新手,我还不太了解如何使用关系

 <?php namespace Activity;

use Illuminate\Database\Eloquent\Model;

class UserCompany extends Model 
    protected $table = 'tn_user';
    public $timestamps = false;

    protected $fillable = [

    ];

    /*public function usercompany()
        return $this->belongsTo('Activity\user');
    */

【问题讨论】:

如何保持两个表之间的关系?什么是外键? 嗯,你说得对,我还在想它 我更改了一些属性,在userid 我将其更改为id_user,然后在tn_user 我添加另一个字段名称id_user,所以外键是@987654356 @ 【参考方案1】:

您应该知道,在UserCompany 类中,通过设置fillable,这意味着您正在设置要更改的表列,在本例中为tn_user 表。所以这意味着,通过设置

protected $fillable = [];

这意味着,当您使用以下命令时,您不应该修改任何表列;

$user_details->cv_name = Input::get('cv_name');

好的,所以你应该知道的第一件事是,当创建两个表时,即userstn_users,你应该有一个包含与这两个表相关的值的列,我建议你是用户@来自users 表的987654330@:

我注意到您使用cn_id 作为链接器,但最好是每个表都有自己的递增 id 列,在这种情况下,还有自己的 link_id 列

假设你要重新开始:

    打开 命令提示符终端 并转到您的 laravel 项目文件夹目录并输入:-$ php artisan make:model User -m 并再次输入 -$ php artisan make:model UserDetail -m

    这将做的是,创建UserUserDetail,并添加-m 意味着它为create_users_tablecreate_user_details_table 关联的模型创建迁移

    create_users_table 只需创建所需的表列,如下所示:


use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;   

class CreateUsersTable extends Migration

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    
        Schema::create('users', function (Blueprint $table)
            $table->increments('id');
            $table->integer('auth');
            $table->string('username')->unique();
            $table->string('email');
            $table->string('password');
            $table->boolean('online');
            $table->string('lang', 2);
            $table->rememberToken();
            $table->timestamps();
        );
        
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    
        //
        Schema::drop('users');
    

现在create_tn_users_table 有点重要,您应该设置与用户帐户的链接,以便假设您删除用户,他的凭据也会被删除,但如果您愿意,您可以这样做。


use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateTnUsersTable extends Migration

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    
        Schema::create('tn_users', function (Blueprint $table) 
            $table->increments('id');
            $table->string('full_name');
            $table->string('username')->unique();
            $table->integer('link_user_id')
                ->references('id')->on('users');   // Relationship btn table tn_users and users
            $table->string('phone');
        );
    

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    
        Schema::drop('tn_users');
    

现在转到命令提示符终端并输入-$ php artisan migrate以创建表格。

再次在命令提示符终端输入-$ php artisan make:controller UserController --resource,然后将控制器与其资源一起制作。

在 UserController 内的 create() 函数中,添加 Request 作为参数。

提交您创建的表单后即可使用功能


namespace App\Http\Controllers;

use App\User;
use App\TnUser;
use ...

class UserController extends Controller
    public function create(Request $request)
         $tn_user = new TnUser();
         $user = new User();
         $user->username = $request['username'];
         $user->password = bcrypt($request['username']);
         ...
         $user->save();
         $tn_user->full_name = ucword(strtolower($request['full_name'));
         $tn_user->link_user_id = $user->id;   // uses the previously save id
         $tn_user->phone = trim($request['phone']);
         $th_user->save();
    

我希望我已经回答了你的问题。以下是一些有用的学习链接。

https://laravel.com/docs/5.1/migrations#creating-columns https://laravel.com/docs/5.1/requests

【讨论】:

【参考方案2】:

你创建了 2 个对象

$user = new User()
$user->username = INPUT::get('username');
$user->password = $password // Hashed
$user->save();
$user_detail = new UserCompany() // Your detail table modal.
$user_detail->cv_name = Input::get('cv_name');
//etc
$user_detail->save()

【讨论】:

我的模型中的关系怎么样?

以上是关于Laravel 插入 2 个表的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 中将数据从 1 个视图插入到 2 个表中

如何使用 laravel 集合获取最后插入的 ID 并将其插入到第二个表中?

Laravel 1 个外键,2 个表 Eloquent ORM

如何使用 laravel 将表单字段保存在 2 个表中

Laravel 8 如何连接 2 个表并检查值是不是存在

Laravel 连接 2 个表,第一个表中的一个数据和第二个表中的多行