我想使用Laravel上的关系来访问控制器功能中的数据。
我先解释一下我的代码:
我有3个表,项目,客户端和client_project。
此时,client_project没有任何关系,我只是手动添加它。
现在我想在laravel上使用关系,但它有点令人困惑(至少对我而言)。
我认为项目和客户端表的代码并不太重要,只需要像主键一样的id,以及更多的字段。
我的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表),但我认为这是一个错误的想法。我也希望用这张表来制作它。
所以,现在,问题是当我尝试调用功能控制器时,我想我可以使用示例来访问数据:
App\Models\Project::find(1)
,就像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。我想让它充满活力。我创建客户端和项目,我的代码获取最后一个(更大的id),以及最后一个(更大的id)项目。 如何使用关系访问它们? 可能需要编辑client_project的迁移并将一些键放在project_id或client_id中?
如果需要更多信息,请询问。 任何帮助将不胜感激!
答案 0 :(得分:0)
这是你的回答。您正在为客户端和项目创建数据透视表,这样您就可以将任意数量的项目附加到任何客户端。这是与模型的关系。
客户端模型
<?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');
}
}
?>
对于Save project id,在控制器方法
中使用以下方式 $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);
。