在laravel中使用动态创建的锚点href进行搜索

时间:2016-03-02 19:53:32

标签: php mysql laravel-5 anchor

我想要包含一个动态创建的锚点,该锚点链接到显示该公司所有用户的搜索页面。允许用户与多个公司建立联系。从mysql数据库示例中提取信息:

John Doe隶属于:

  • 百事可乐公司
  • Cold Drinks Inc Company
  • 运动饮料公司

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是构建数据库的最佳方式。我应该为每个联盟使用一个列,还是将所有从属关系放在一个。

1 个答案:

答案 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');