TP5,數據模型model關聯關系和關聯查詢筆記


一對一:

如:人和身份證的關系。

即A表的一條數據,對應B表的一條數據;B表的一條數據,對應A表的一條數據。

model類操作:

需要在你要管理/操作的那個model內,加上關系

例如:

業務需求:查某人信息,同時關聯查詢出他的身份證信息。

人  表  user:id,name,codeid(此列對應身份證表id)

身份證表  code:id,codenum

首先,在user的model里加入:

class User extends Model
{
 //usercode名字是自定義的,不受限制,盡量以開頭小寫的駝峰式命名法
 public function usercode()
  { 
    //第一個參數:關聯的表名(關聯誰?)
    //第二個參數:user表的外鍵(關聯誰的啥?)
    //第三個參數:對應的code表的主鍵(我用啥去關聯這個?)
    //后兩個參數可以省略,不建議
    return $this->hasMany("code","id","codeid"); 
  }
}

 

其次,在user的controller類里,使用的時候如下:

//以插入為列子:
$list = $this->request->param();
//先添加user表數據
$u=new User();
$u->allowField(true)->save($list); 

//同時添加身份證信息,一對一關聯 (user的實例內已經有了save后的id)
$u->usercode()->save();

查詢時加入->with("自定義方法名"),如->with("usercode")

一對多:

如:班級和學生的關系

一個班級有多個學生,一個學生只屬於一個班級

例如:

業務需求:查某學生信息,同時關聯查詢該學生所屬班級。

班級表  class:id,name(這里不考慮class保留字段的問題)

學生表  students:id,name,classid(此列對應班級id)

首先,在學生的model里加入:

class Students extends Model
{
  public function getclass()
  {     
//第一個參數:關聯的表名(關聯誰?)     //第二個參數:class表的主鍵(關聯誰的啥?)     //第三個參數:對應的學生表的外鍵(我用啥去關聯這個?)     //后兩個參數可以省略,不建議     return $this->hasMany("Class","id","classid");
  }
}

 

其次,在students的controller類里,使用的時候如下:

$list = (new Students())->where("條件什么的")->with("getclass")->select();

 


其他情況,如多對一,可以轉化為一對多

如果有多對多的情況,可以建立,也必須建立中間表,從而轉化為一對多+多對一的問題。

 

最后:官方文檔寫的實在太簡略了,不利於推廣使用

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM