2016-03-02 41 views
0

我想包含一個dynamicaly創建的錨鏈接到顯示該公司所有用戶的搜索頁面。用戶被允許隸屬於多家公司。該信息被從MySQL數據庫的例子拉:在laravel中使用動態創建的錨href搜索

李四隸屬於:

  • 百事公司
  • 冷飲INC。公司
  • 運動飲料公司

李四隸屬於:

<a href="search/useraffiliation1"> Pespi Company</a> 
<a href="search/useraffiliation2"> Cold Drinks Inc Company</a> 
<a href="search/useraffiliation3"> Sports Drinks Company</a> 

1.什麼是最好的方式去做這件事。

2.什麼是構建我的數據庫的最佳方式。我應該爲每個聯盟使用單個列還是將所有聯盟歸入一個聯盟。

+1

I'd使用3個表(用戶,x_user_affiliations,公司) –

+1

還我會電子書籍,你認爲一個鏈接結構,如: 'search/user/{user_id}/affiliations',也許'search/affiliation/{affiliation_id}' –

+0

非常感謝你,讓我省去了很多頭痛!我瞭解三表格結構,但請您詳細解釋結構。非常感謝!例如,你將如何爲每個用戶,用戶從屬關係和從屬關係構建表格! – Luna

回答

1

編輯:我只是意識到我是迴應評論,並沒有真正回答你原來的問題,所以我更新了我的例子下面。

如果您完全使用Laravel和工匠來構建數據庫並跟蹤遷移,那麼您需要爲3表做什麼。您希望affiliations表保存用戶的id和公司的id。

首先,在命令行中創建3個數據庫遷移:

php artisan make:migration create_users_table --table="users" 
php artisan make:migration create_companies_table --table="companies" 
php artisan make:migration create_affiliations_table --table="affiliations" 

現在你將有你的/數據庫/文件夾遷移遷移3個檔。

的文件將是這樣的:

<?php 

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

class CreateTableUsers extends Migration 
{ 
    public function up() 
    { 
     Schema::create('users', function (Blueprint $table) { 
      $table->increments('id')->unsigned(); 
      $table->string('email')->unique(); 
      $table->string('password', 60); 
      //more fields @see https://laravel.com/docs/master/migrations#creating-columns 
      $table->rememberToken(); 
      $table->timestamps(); 
      $table->softDeletes(); 
     }); 
    } 

    public function down() 
    { 
     Schema::drop('users'); 
    } 
} 

-

<?php 

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

class CreateTableCompanies extends Migration 
{ 
    public function up() 
    { 
     Schema::create('companies', function (Blueprint $table) { 
      $table->increments('id')->unsigned(); 
      $table->string('name', 100); 
      //more fields @see https://laravel.com/docs/master/migrations#creating-columns 
      $table->timestamps(); 
      $table->softDeletes(); 
     }); 
    } 

    public function down() 
    { 
     Schema::drop('companies'); 
    } 
} 

-

<?php 

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

class CreateTableAffiliations extends Migration 
{ 
    public function up() 
    { 
     Schema::create('affiliations', function (Blueprint $table) { 
      $table->integer('user_id')->unsigned(); 
      $table->integer('company_id')->unsigned(); 
      $table->primary(['user_id', 'company_id']); 
     }); 
    } 

    public function down() 
    { 
     Schema::drop('affiliations'); 
    } 
} 

現在運行人員更多的時間在您的控制檯來創建表。

php artisan migrate 

當您查詢數據庫時,您有幾個選項。例如,一個原始的SQL查詢可能類似於:

SELECT c.* FROM affiliations a JOIN companies c ON (a.company_id=c.id) WHERE a.user_id=1; 

SELECT u.* FROM affiliations a JOIN users u ON (a.user_id=u.id) WHERE a.company_id=1; 

但是,它可能會更好,因爲你正在使用Laravel用雄辯的車型。我喜歡在我的App/Db文件夾中創建Db模型。例如,這就是/App/Db/Companies.php的樣子。

<?php 

namespace App\Db; 

use Illuminate\Database\Eloquent\Model; 
use Illuminate\Database\Eloquent\SoftDeletes; 

class Companies extends Model { 

    use SoftDeletes; 

    public function affiliations() { 
     return $this->hasMany('App\Db\Affiliations', 'company_id', 'id'); 
    } 
} 

這只是一個例子,沒有測試過。

參考https://laravel.com/docs/master/eloquent-relationships#defining-relationships

你會讓你的其他數據庫的錶款(兼職&用戶)過了,在你的應用程序,查詢可能是這樣的:

class CompanyController extends Controller { 

    public function search($id) { 
     $company = Companies::find($id); 
     $company->load('affiliations.users'); 

     foreach ($company->affiliation as $aff) { 
      echo $aff->user->name; 
     }  
    } 
} 

你可以切換,圍繞您也可以找到與該公司ID具有聯屬關係的用戶。關於查詢關係的更多信息:https://laravel.com/docs/master/eloquent-relationships#querying-relations

有幾種方法可以實現您想要的結果,所以真正瞭解這些雄辯的關係!對於如此簡單的事情來說,這似乎有很多工作要做,但是當您構建更大的應用程序時,它非常方便。

有關您原來的問題,這樣做的路由看起來是這樣:

Route::get('/search/company/{id}', '[email protected]'); 
+0

好東西,謝謝100萬! – Luna