我想要包含一个动态创建的锚点,该锚点链接到显示该公司所有用户的搜索页面。允许用户与多个公司建立联系。从mysql数据库示例中提取信息:
John Doe隶属于:
John Doe隶属于:
<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.Whats是构建数据库的最佳方式。我应该为每个联盟使用一个列,还是将所有从属关系放在一个。
答案 0 :(得分:1)
编辑:我刚刚意识到我正在回复评论并且没有真正回答您原来的问题,所以我更新了以下示例。
如果您完全使用Laravel和artisan来构建数据库并跟踪迁移,那么您需要为 3个表执行此操作。您希望关联表保存用户的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"
现在,您的/ database / migrations文件夹中将有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
您也可以创建其他Db表模型(Affiliations&amp; Users),在您的应用程序中,查询可能如下所示:
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}', 'CompanyController@search');