Я хочу получить доступ к данным в функции контроллера, используя отношения на Laravel.
Сначала я объясню свой код:
У меня есть 3 таблицы, проекты, клиент и клиент_проект.
В настоящий момент клиент_проект не имеет никаких отношений, я просто добавляю его вручную.
Теперь я хочу использовать отношения на laravel, но это немного запутывает (по крайней мере для меня).
Я думаю, что это не слишком важно для кода проектов и таблицы клиентов, просто имеет идентификатор, как первичный ключ, и некоторые поля больше.
Моя миграция client_project выглядит вот так:
<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; class CreateClientProjectTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('client_project', function(Blueprint $table) { $table->increments('id'); $table->integer('client_id'); $table->integer('project_id'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::drop('client_project'); } }
Модель Client_Project выглядит вот так:
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class Client_Project extends Model { protected $fillable = ['client_id','project_id']; public $table = 'client_project'; public function clients() { return $this->hasMany('App\Models\Project'); } public function projects() { return $this->hasOne('App\Models\Client'); } }
Один клиент может иметь более одного проекта, но один проект создается только одним клиентом. Я считаю, что отношения объявлены хорошими.
(Сначала я думаю, что с отношениями мне не нужно делать таблицу client_project), но я думаю, что это неправильная идея. Я тоже хочу сделать это с этой таблицей.
Итак, теперь проблема в том, что когда я пытаюсь вызвать контроллер функции, я думаю, что могу получить доступ к данным, используя пример por:
App\Models\Project::find(1)
, как говорит doc laravel.
Функция такова:
$client = new Client(); $client->name = $request->input("nameClient"); $client->slug = $request->input("slugClient"); $client->priority = $request->input("priorityClient"); $client->save(); $client_project = new Client_Project(); $client_project->client_id = App\Models\Client::max('id'); $client_project->project_id = App\Models\Projects::max('id'); $client_project->save();
Работает часть клиента. Я просто принимаю значение некоторых входов, и я создаю новый.
Проблема заключается в $ client_project. Я хочу сделать его динамичным. Я создаю клиента и проект, а мой код получает последний (более высокий идентификатор) и последний (более большой идентификатор) проектов. Как я могу получить к ним доступ с помощью отношений? Возможно, нужно изменить миграцию client_project и поместить некоторый ключ в project_id или client_id?
Если вам нужна дополнительная информация, пожалуйста, спросите об этом. Любая помощь будет оценена!
Вот ваш аз. Вы идете хорошо, как вы создали сводную таблицу для клиента и проекта, чтобы вы могли прикреплять столько проектов к любому клиенту. Вот связь с моделью.
Модель клиента
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class Client extends Model { public function projects() { return $this->belongsToMany(Project::class,'client_project'); } }
Модель проекта
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class Projects extends Model { public function client() { return $this->belongsToMany(Client::class,'client_project'); } } ?>
Для сохранения идентификатора проекта используйте следующий способ в методе контроллера
$client = new Client(); $client->name = $request->input("nameClient"); $client->slug = $request->input("slugClient"); $client->priority = $request->input("priorityClient"); $client->save(); $project = new Project(); //include fields as per your table $project->save(); $client->projects()->attach($project->id);
,