2017-08-09 56 views
1

此前我正在研究核心php,目前我轉向laravel和 mvc。所以我對mvc和laravel也不太瞭解。我面臨着一個 問題。幫我解決這個問題。如何使用laravel mvc將主ID存儲在另一個表中?

我有2個表:

  1. 公司
  2. company_address

模型公司:

class Company extends Eloquent { 

    protected $fillable = [ 
          'name', 
          'email', 
          'website', 
          'logo', 
          'phone', 

         ]; 
    protected $primaryKey = 'id'; 
    protected $table = 'companies'; 
} 

模型company_address:

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_address表中存儲company表主鍵作爲外鍵。所以在將來我可以顯示特定公司的地址。 如何做到這一點?

回答

0

集公司標識之前節省公司地址:

$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']); 
    } 
+0

它顯示錯誤試圖獲得非對象的屬性兄弟 –

0

一個很好的方法是使用雄辯的關係來定義兩者之間的關係。請參閱:

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); 
0

只需將在此之前$ data變量的定義。 (因爲你已經有$公司收藏集)

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

$ companyaddress之前。也沒有必要爲$數據變量(恕我直言)

0

首先通過添加函數在模型中添加一些關係。

在您的公司模型。

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'); 
    } 
} 

in your CompanyAddress model。

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'); 
    } 
} 

然後在你的控制器中。

y'can可以在您的方法中添加此代碼。 將save()方法應用到「companies」表後,獲取最後插入的ID,假定您的主鍵是自動增量。

$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

0

在你的情況下,如果一個公司有一個地址,你應該結合它成一張桌子。但是,如果你需要的話,在這裏:

型號Company.php

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(); 
} 

,當你調用結果getCompany($ id)

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

希望它會有所幫助。謝謝。

+0

感謝您的回覆,但它顯示我錯誤的類應用程序\公司不存在 ' –

+0

您的公司模型的位置在哪裏? –

+0

我有一個公司的多個公司地址,所以我創建單獨的表 –

相關問題