【发布时间】:2018-01-11 00:50:34
【问题描述】:
我想使用 Laravel 上的关系访问控制器功能中的数据。
我先解释一下我的代码:
我有 3 个表、项目、客户和客户项目。
此时,client_project 没有任何关系,我只是手动添加它。
现在我想在 laravel 上使用关系,但这有点令人困惑(至少对我来说)。
我觉得projects和clients表的代码不太重要,只要有主键之类的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 表),但我认为这是一个错误的想法。我也想用这张桌子来做。
所以,现在,当我尝试调用函数控制器时,我想我可以使用 por 示例访问数据:
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 中输入一些键?
如果需要更多信息,请询问。 任何帮助将不胜感激!
【问题讨论】:
-
你把事情复杂化了,你不需要client_project表(这种类型的表在许多对多的关系中使用),你只需在你的项目表中添加client_id行并在客户端项目之间建立关系。但是,如果您也想要第三张表,那么只需将其设置为多对多关系(您不需要 ClientProject 模型,您可以在 Client 和 Project 模型中建立关系 - 多对多)。
-
您可以使用 $client->id 获取最后插入的客户端 ID。这样,如果您有多个用户同时插入,则它会变为错误值。
-
@Autista_z 你能回答我的代码看起来如何吗?我想我只会用两个表来做,并为各自的 id 添加 1 个字段。
标签: php mysql sql laravel relationships