使用关系Laravel访问数据

时间:2017-08-03 12:10:29

标签: php mysql sql laravel relationships

我想使用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中?

如果需要更多信息,请询问。 任何帮助将不胜感激!

1 个答案:

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