Поиск с использованием динамически созданного якорного HREF в Laravel

Я хочу включить динамически созданный якорь, который ссылается на страницу поиска, которая отображает всех пользователей этой компании. Пользователи могут быть связаны с более чем одной компанией. Информация извлекается из примера базы данных mysql:

Джон Доу связан с:

  • Компания Пепси
  • Компания Cold Drinks 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. Какой лучший способ структурировать мою базу данных. Должен ли я использовать один столбец для каждой принадлежности или поместить все присоединения в одну.

0

Решение

РЕДАКТИРОВАТЬ: Я только что понял, что я отвечал на комментарии и не ответил на ваш первоначальный вопрос, поэтому я обновил свои примеры ниже.

Если вы полностью используете Laravel и artisan для создания своей базы данных и отслеживания миграций, вот что вам нужно сделать для 3 стола. Вы хотите, чтобы таблица присоединений содержала идентификатор пользователя и идентификатор компании.

Сначала создайте 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 файла миграции в папке / database / migrations.

Файлы будут выглядеть так:

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

Теперь запустите artisan еще раз в консоли, чтобы создать таблицы.

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. Мне нравится создавать модели Db в моей папке App / 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 & Пользователи), и в вашем приложении запрос может выглядеть так:

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

Вы также можете изменить это, когда найдете пользователей, имеющих отношение к идентификатору этой компании. Подробнее о запросе отношений: https://laravel.com/docs/master/eloquent-relationships#querying-relations

Есть несколько способов достичь желаемого результата, так что действительно читайте об этих красноречивых отношениях! Кажется, много работы для чего-то такого простого, но когда вы создаете большие приложения, это очень удобно.

Относительно вашего исходного вопроса, маршрут для этого может выглядеть так:

Route::get('/search/company/{id}', 'CompanyController@search');
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector