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아이디를 넣고 움직였어요.
끝맺다
인터넷에서든 인터넷에서든 어떤 정보도 찾을 수 없었지만 문서를 보니 쓰여 있었다.좋은 경험인 것 같아서요.
이상한 점이 있으면 부드럽게 말해주세요.부탁이야.
Reference
이 문제에 관하여(Laavel 5.8 외부 키워드로 기본값이 아닌 열을 사용하는 관계), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/shira79/items/8acbd424b770588cc371텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)