Laavel 5.8 외부 키워드로 기본값이 아닌 열을 사용하는 관계

11126 단어 PHPLaravellaravel5.8

이번에 사용한 책상 디자인.


한work(업무)에 여러 applicaton(응시)의 일대다 관계가 존재한다.이 두 책상 위에서 일하다id로 간단하게 호출할 수 있습니다.
특별히 지적할 만한 곳
· 워크스테이션의 메인 열쇠는 id가 아니라 work입니다id
・work아이디에 32자리 uid가 있습니다.type은string입니다.

컨디션


OS : macOS Mojave 10.14.5
PHP : 7.3.1
mysql : Ver 14.14 Distrib 5.6.42, for osx10.14 (x86_64) using EditLine wrapper
Laravel : 5.7.6

절차.


・migration
· 워크의 메인 키 설정
• 모델에서 관계식을 설명하는 설정

migration


작업대


create_works_table.php

public function up()
    {
        Schema::create('works', function (Blueprint $table) {
            $table->char('work_id',32);
            $table->primary('work_id');
            //work_idを主キーに設定
            $table->string('catch_copy',50);
            $table->string('place',50);
            $table->string('description',500);
            $table->timestamps();

        });
    }

테이블 적용


create_applications_table.php

public function up()
    {
        Schema::create('applications', function (Blueprint $table) {
            $table->bigIncrements('id');

            $table->char('work_id',32);
            $table->foreign('work_id')->references('work_id')->on('works');
            // このテーブルのwork_idを、worksテーブルのwork_idを参照する外部キーにする

            $table->string('message',500);
            $table->timestamps();
        });
    }

Work 기본 키워드 구성


work의 메인 키 이름은 id가 아니라 uid입니다.laavel 기준과 다르기 때문에 약간의 설정이 필요합니다.
Work.php
class Work extends Model
{
    protected $primaryKey = 'work_id';
    // 主キーをオーバーライド
    public $incrementing = false;
    // IDが自動増分されない場合
    protected $keyType = 'string'
    // 主キーが整数でない場合
}
Laavel의 기본 키워드 설정은 문서의 다음 페이지에 표시됩니다.
Eloquent의 준비(https://readouble.com/laravel/5.8/ja/eloquent.html)

$primaryKey


모델별 모계 모델.php를 확인한 후 아래와 같이 기본값은 "id"입니다.
Model.php
protected $primaryKey = 'id';
일터.php로 덮어쓰기,Work의 주요 열쇠workid로 설정할 수 있습니다.

$incrementing


ID의 자동 증가 여부에 대한 속성입니다.Model.php에서 진짜예요.
이번에는 uid라서 자동으로 늘어나지 않으니 가짜로 해드릴게요.

$keyType


$keyType은 기본 키 type에 대한 속성입니다.
Model.php는 int입니다.정수가 아닌 경우string으로 설정합니다.
(increamenting, 키타입 설정은 없어도 움직인다. 안 쓰면 언제 곤란해할까요?)

모델에서 관계식 설정 설명하기


우선 아까 워크입니다.php에 추가
Work.php
class Work extends Model
{
    protected $primaryKey = 'work_id';
    public $incrementing = false;
    protected $keyType = 'string';

    public function applications(){
        return $this->hasMany('App\Application', 'work_id');
        // 第二引数にforeign_keyを設定する。
    }
}
다음은 Application입니다.php입니다.
Application.php
class Application extends Model
{
    public function work(){
        return $this->belongsTo('App\Work','work_id');
        // 第二引数にforeign_keyを設定する。
    }
}
문서는 다음과 같습니다.
관계식https://readouble.com/laravel/5.8/ja/eloquent-relationships.html

foreign_key


foreign_키가 매개 변수로 지정되지 않으면 모델 이름++$$+primary_키 형식으로.
방금 일하는 $primary키가 과부하되어 "work"work_아이디가 됐어요.이렇게 하면 오류가 발생하기 때문에 이번에는foreign입니다.키 중량 초과해 드릴게요.

참고 자료


관계와 관련된 방법은hasMany,hasOne,belongsto 등이 있다.
Illuminate\Database\Eloquent\Concerns\HasRelationships.php에 기술되어 있습니다.
HasRelationships.php
public function hasOne($related, $foreignKey = null, $localKey = null)
    {
        $instance = $this->newRelatedInstance($related);
        $foreignKey = $foreignKey ?: $this->getForeignKey();
        $localKey = $localKey ?: $this->getKeyName();

        return $this->newHasOne($instance->newQuery(), $this, $instance->getTable().'.'.$foreignKey, $localKey);
    }

local_key


이번엔 지정하지 않았지만 foreig키뿐만 아니라local키를 지정할 수도 있습니다.
local_키가 기본값이면 primary키가 되다.이번에는 이미 $primary입니다.작업 키id와 다시 쓰기 때문에 새로운 설정이 필요 없습니다.
하면, 만약, 만약...php로 달러를 바꾸다키를 초과하지 않으면 local키 즉 제3인자work아이디를 넣고 움직였어요.

끝맺다


인터넷에서든 인터넷에서든 어떤 정보도 찾을 수 없었지만 문서를 보니 쓰여 있었다.좋은 경험인 것 같아서요.
이상한 점이 있으면 부드럽게 말해주세요.부탁이야.

좋은 웹페이지 즐겨찾기