代码之家  ›  专栏  ›  技术社区  ›  amit sutar

如何使用laravel mvc将主id存储在另一个表中?

  •  1
  • amit sutar  · 技术社区  · 7 年前

    早些时候我在研究核心php,现在我转向了laravel和 mvc。所以我对mvc和拉雷维尔也不太了解。我正面临一个

    我有两张桌子:

    公司模型:

    class Company extends Eloquent {
    
        protected $fillable = [
                                'name',
                                'email',
                                'website',
                                'logo',
                                'phone',
    
                            ];
        protected $primaryKey = 'id';
        protected $table = 'companies';
    }
    

    公司地址模型:

    class Companyaddress extends Eloquent {
    
        protected $fillable = [
                                'companies_id',
                                'address_line_1',
                                'address_line_2',
                                'city',
                                'state',
                                'zipcode',
                                'country_id',                           
                            ];
        protected $primaryKey = 'id';
        protected $table = 'company_address';
    }
    

    public function store(CompanyRequest $request, Company $company, Companyaddress $companyaddress){   
    
            if(!Entrust::can('create-company'))
                return response()->json(['message' => trans('messages.permission_denied'), 'status' => 'error']);
    
            $data = $request->all();
            $company->fill($data)->save();
            $companyaddress->fill($data)->save();
            storeCustomField($this->form,$company->id, $data);
    
            $this->logActivity(['module' => 'company_address','module_id' => $company->id,'activity' => 'added']);
    
            return response()->json(['message' => trans('messages.company').' '.trans('messages.added'), 'status' => 'success']);
        }
    

    我的代码运行良好。提交时,我可以根据我的模型存储数据。 我想储存 company 表主键输入 company_address 表作为外键。所以将来我可以显示特定公司的地址。 怎么做?

    5 回复  |  直到 7 年前
        1
  •  0
  •   Govind Samrow    7 年前

    保存公司地址前设置公司Id:

    $data->companies_id = $company->id;
    

    $data['companies_id '] = $company->id;
    

    public function store(CompanyRequest $request, Company $company, Companyaddress $companyaddress){   
    
            if(!Entrust::can('create-company'))
                return response()->json(['message' => trans('messages.permission_denied'), 'status' => 'error']);
    
            $data = $request->all();
            $company->fill($data)->save();
            $data->companies_id = $company->id; //Set company id here
            $companyaddress->fill($data)->save();
            storeCustomField($this->form,$company->id, $data);
    
            $this->logActivity(['module' => 'company_address','module_id' => $company->id,'activity' => 'added']);
    
            return response()->json(['message' => trans('messages.company').' '.trans('messages.added'), 'status' => 'success']);
        }
    
        2
  •  0
  •   Carl Cassar    7 年前

    一个好方法是使用雄辩的关系来定义两者之间的关系。请参阅:

    https://laravel.com/docs/5.4/eloquent-relationships

    Company

    public function address()
    {
        return $this->hasOne(Companyaddress:class);
    }
    

    然后在控制器中,您可以执行以下操作:

    $company = Company::create($data);
    $company_address = Companyaddress::create($data);
    
    
    $company->address()->save($company_address);
    
        3
  •  0
  •   Maky    7 年前

    只需将其放在$data变量定义之前。(因为您已经设置了$company集合)

    $request->merge(['companies_id'=>$company->id]);
    

        4
  •  0
  •   zekromWex    7 年前

    首先通过添加函数在模型中添加一些关系。

    class Company extends Eloquent {
    
        protected $fillable = [
                                'name',
                                'email',
                                'website',
                                'logo',
                                'phone',
    
                            ];
        protected $primaryKey = 'id';
        protected $table = 'companies';
    
        public function companyAddress() 
        {
           return $this->hasOne('App\CompanyAddress');
        }
    }
    

    在您的公司地址模型中。

    class Companyaddress extends Eloquent {
    
        protected $fillable = [
                                'companies_id',
                                'address_line_1',
                                'address_line_2',
                                'city',
                                'state',
                                'zipcode',
                                'country_id',                           
                            ];
        protected $primaryKey = 'id';
        protected $table = 'company_address';
    
        public function companyAddress() 
        {
          return $this->belongsTo('App\Company');
        }
    }
    

    您可以在方法中添加此代码。

    $companyAddress = new CompanyAddress;
    $companyAddress->companies_id = $data->id;
    
    $companyAddress->save();
    

    https://laravel.com/api/5.4/Illuminate/Database/Eloquent/Relations.html

    或者你可以在这里获得信息: Laravel, get last insert id using Eloquent

        5
  •  0
  •   Sophannareth Noy    7 年前

    在您的情况下,如果一家公司有一个地址,您应该将其合并到一个表中。但如果需要,请点击这里:

    class Company extends Eloquent {
    protected $fillable = [
                            'id',
                            'name',
                            'email',
                            'website',
                            'logo',
                            'phone',
    
                        ];
    protected $primaryKey = 'id';
    protected $table = 'companies';
    
    public function address(){
      $this->hasOne(CompanyAddress::class,'company_id','id')
    }
    }
    

    模型CompanyAddress.php

    class CompanyAddress extends Eloquent {
    
    protected $fillable = [
                            'company_id',
                            'address_line_1',
                            'address_line_2',
                            'city',
                            'state',
                            'zipcode',
                            'country_id',                           
                        ];
    protected $table = 'company_address';
    }
    

    在控制器中

    public function store(CompanyRequest $request, Company $company, Companyaddress $companyaddress){   
    
        if(!Entrust::can('create-company'))
            return response()->json(['message' => trans('messages.permission_denied'), 'status' => 'error']);
    
        $data = $request->all();
        $company->fill($data)->save();
        $data->company_id = $company->id;
        $companyaddress->fill($data)->save();
    
    
        $this->logActivity(['module' => 'company_address','module_id' => $company->id,'activity' => 'added']);
    
        return response()->json(['message' => trans('messages.company').' '.trans('messages.added'), 'status' => 'success']);
    }
    
    public function getCompany($id){
        $company = Company::find($id);
        $company->address;
        return $company->toArray();
    }
    

    {
        id : ...,
        name : ...,
        .
        .
        .
        address : {
                   company_id: ...,
                   address_line_1: ...,
                   .
                   .
                   .
                  }
    }
    

    希望能有所帮助。谢谢