```
新建
D:\\phpStudy\\WWW\\20201213\\application\\home\\model\\Profile.php
新建數據用create不能用save
字段為空,設置字段為text ,還是為空,修改頁面字體GBK ->UTF-8
Use of undefined constant profile - assumed 'profile'
echo $user-profile;
改為
echo $user->profile;
如何使用
$user = UserModel::get(8);
//$user->profileone;
$user->profilemany;
return $user;
顯示:
{"id":8,"username":"qian","password":"123","gender":"女","profilemany":\[{"id":1,"user\_id":8,"hobby":"吃"},{"id":2,"user\_id":8,"hobby":"吃2"}\]}
完成版
D:\\phpStudy\\WWW\\20201213\\application\\home\\model\\User.php
namespace app\\home\\model;
use think\\Model;
class User extends Model
{
public function profileone()
{
return $this->hasOne('profile','user\_id','id'); //附表 附表字段 主表字段
}
public function profilemany()
{
return $this->hasMany('profile','user\_id','id');
}
}
D:\\phpStudy\\WWW\\20201213\\application\\home\\model\\Profile.php
namespace app\\home\\model;
use think\\Model;
class Profile extends Model
{
}
D:\\phpStudy\\WWW\\20201213\\application\\home\\controller\\Grade.php
namespace app\\home\\controller;
use think\\Controller;
use app\\home\\model\\User as UserModel;
use app\\home\\model\\Profile as ProfileModel;
class Grade extends Controller
{
//http://127.0.0.1:1213/index.php/Grade
public function Index()
{
// $data = \[
// 'username' => 'zhang',
// 'password' => '123',
// 'gender' \=> '男'
// \];
$user = UserModel::get(8);
//$user->profileone;
$user->profilemany;
return $user;
}
//http://127.0.0.1:1213/index.php/Grade/saveok
public function saveok(){
$data = \[
'username' => 'qian',
'password' => '123',
'gender' \=> '女'
\];
$user = UserModel::create($data);
echo $user->id;
}
public function prosaveok(){
$data = \[
'user\_id' => '8',
'hobby' => '吃',
\];
$user =ProfileModel::create($data);
echo $user->id;
}
}
報錯
Class 'app\\home\\model\\User\\Profile' not found
答表的命名空間不同
return $this->hasOne('app\\home\\model\\Profile\\Profile','user\_id','id');
一對多關聯
Trying to get property of non-object
或者 Undefined property: think\\model\\relation\\HasMany::$hobby
dump($user->profilemany\->hobby); 或者 dump($user->profilemany()->hobby);
答一對多不能查詢單個字段的值,這個查詢是錯誤的. 加括號也是不行的
Call to a member function where() on array
return $user->profilemany->where('id','>','1')->select();
答:沒有加小括號
return $user->profilemany()\->where('id','>','1')->select();
variable type error: array
沒有用json輸出
return json($user->profilemany()->where('id','>','1')->select());
method not exist:think\\db\\Query->profile
沒有這個方法 改為
$user1 = UserModel::has('profilemany','>=','2')->select();
variable type error: array
答沒有return為json格式.
Has方法,主要是對附表進行數量統計,來顯示主表的結果.只針對一對多
SELECT \* FROM `tp\_user` `User` INNER JOIN `tp\_profile` `Profile` ON `User`.`id`=`Profile`.`user\_id` GROUP BY `Profile`.`user\_id` HAVING count(\*)>=2
一對多模型的函數, // 附表比較// 數量和
返回的是主表的結果 .
$user1 = UserModel::has('profilemany','>=','2')->select();
Haswhere方法
method not exist:think\\db\\Query->profile
$user2 = UserModel::hasWhere('profilemany',\['status'=>2\])->select();
SELECT `User`.\* FROM `tp\_user` `User` INNER JOIN `tp\_profile` `Profile` ON `User`.`id`=`Profile`.`user\_id` WHERE `Profile`.`status` = '2' GROUP BY `User`.`id`
根據附表的某字段相等的值,來顯示主表的結果
Save方法
類的屬性不存在:app\\home\\model\\User\\User->profile
原
return $user3->profile->save(\[
'hobby'=>'玩',
'status'=>'0'
\]);
改
return $user3->profilemany\->save(\[
'hobby'=>'玩',
'status'=>'0'
\]);
Call to a member function save() on array
改為
return $user3->profilemany()\->save(\[
'hobby'=>'玩',
'status'=>'0'
\]);
Method app\\home\\model\\Profile\\Profile::\_\_toString() must return a string value
Save不能直接return 必須要return $user3->id;
原
return $user3->profilemany()->save(\[
'hobby'=>'玩',
'status'=>'0'
\]);
改為
$user3 = UserModel::get(8);
$user3->profilemany()->save(\[
'hobby'=>'玩',
'status'=>'0'
\]);
return $user3->id;
數據庫里沒有中文數據
答:查看文件格式為GBK改為utf-8
Save先查詢主表單條數據,再新增附表數據
$user3 = UserModel::get(8);
$user3->profilemany()->save(\[
'hobby'=> '玩',
'status'=> '0'
\]);
return $user3->id;
INSERT INTO `tp\_profile` (`hobby` , `status` , `user\_id`) VALUES ('玩' , 0 , 8)
Saveall
Illegal string offset 'user\_id'
$user4 = UserModel::get(8);
$user4->profilemany()->saveAll(
\['hobby'=>'樂','status'=>1\],
\['hobby'=>'樂1','status'=>0\]
);
//return $user4->id;
Illegal string offset 'user\_id'
\[2\]Illegal string offset 'user\_id'\[D:\\phpStudy\\WWW\\20201213\\thinkphp\\library\\think\\model\\relation\\HasMany.php:210\]
$user4->profilemany()->saveAll( \['hobby'=>'樂','status'=>1\],\['hobby'=>'樂','status'=>1\]);
改為
$user4->profilemany()->saveAll(array(\['hobby'=>'樂','status'=>1\],\['hobby'=>'樂','status'=>1\]));
或者
$user4->profilemany()->saveAll(\[\['hobby'=>'樂','status'=>1\],\['hobby'=>'樂','status'=>1\]\]);
Toregest
類的屬性不存在:app\\home\\model\\User\\User->profile
原
$user5 = UserModel::get(6);
$user5->together('profile')->delete();
改為
$user5->together('profilemany')->delete();
Call to a member function together() on null
return json($user5); //null
已經刪除這個這條數據了,沒有這個ID=6的數據了
$user5 = UserModel::get(7);
$user5->together('profilemany')->delete();
只刪除了主表user數據,并沒有刪除附表數據
改
$user5 = UserModel::get(7,’profile’);
$user5->together('profilemany')->delete();
method not exist:think\\db\\Query->profile
原
$user5 = UserModel::get(7,'profile');
$user5->together('profilemany')->delete();
改
$user5 = UserModel::get(7,'profilemany');
$user5->together('profilemany')->delete();
Call to a member function together() on null
改為
數據已經不存在了.
原
$user5 = UserModel::get(7,'profile');
$user5->together('profilemany')->delete();
改
$user5 = UserModel::get(8,'profilemany');
$user5->together('profilemany')->delete();
// $user5 = UserModel::get(8,'profilemany');
$user5 = UserModel::get(10,'profilemany');
json($user5);
//$user5->together('profilemany')->delete();
$user5->together(\['profilemany'\])->delete();
不能刪除附表數據 關聯刪除只支持一對一模式,不能用于一對多模式
$user5 = UserModel::get(11,'profileone');
$user5->together(\['profileone'\])->delete();
method not exist:think\\db\\Query->all
答:沒有這個方法,all只能用select傳個數組
$user = UserModel::with('profilemany')->all(\[4,12,13\]);
foreach($user as $file)
{
print\_r($file->profilemany);
}
改為
$user = UserModel::with('profilemany')->select(\[4,12,13\]);
foreach($user as $file)
{
print\_r($file->profilemany);
}
或者改為
$user = UserModel::all(\[4,12,13\],'profilemany');
foreach($user as $file){
dump($file->profilemany);
}
Load方法 array用load\_relation 延時預載入
Call to a member function load() on array
$user = UserModel::all(\[4,12,13\]);
$user->load ('profile');
foreach($user as $file)
{
dump($file->profilemany);
}
改為
$user = UserModel::all(\[4,12,13\]);
$user\->load\_relation('profile');
foreach($user as $file)
{
dump($file->profilemany);
}
$user = UserModel::all(\[4,12,13\]);
$user \= load\_relation($user,'profile');
改為
$user = UserModel::all(\[4,12,13\]);
$user = load\_relation($user,'profilemany');
兩個表查詢
$user = UserModel::all(\[4,12,13\]);
$user = load\_relation($user,'profilemany,bookmany');
foreach($user as $file)
{
echo var\_dump($file->profilemany,$file->bookmany);
}
D:\\phpStudy\\WWW\\20201213\\application\\home\\model\\Book\\Book.php
namespace app\\home\\model\\Book;
use think\\Model;
class Book extends Model
{
}
D:\\phpStudy\\WWW\\20201213\\application\\home\\model\\User\\User.php
public function bookmany()
{
return $this->hasMany('app\\home\\model\\Book\\Book','user\_id','id');
}
Trying to get property of non-object
Foreach才行
//join
$user = UserModel::With('profileone')->select(\[4,12,13\]);
foreach($user as $file)
{
var\_dump($file->profileone);
}
return $this->hasOne('app\\home\\model\\Profile\\Profile','user\_id','id');
SELECT \* FROM `tp\_profile` WHERE `user\_id` IN (4,13,12)
//return $this->hasOne('app\\home\\model\\Profile\\Profile','user\_id','id')->setEagerlyType(0);
SELECT `user`.`id`,`user`.`username`,`user`.`password`,`user`.`gender`,profileone.id AS profileone\_\_id,profileone.user\_id AS profileone\_\_user\_id,profileone.hobby AS profileone\_\_hobby,profileone.status AS profileone\_\_status FROM `tp\_user` `user` INNER JOIN `tp\_profile` `profileone` ON `user`.`id`=`profileone`.`user\_id` WHERE `user`.`id` IN (4,12,13)
致命錯誤: Call to a member function goodstocatemany() on array
```
- extend加入模塊
- array_column() expects parameter 1 to be array, object given
- tp5.1安裝No input file specified.
- ROOT
- wechatDeveloper
- ThinkLibrary
- 語法錯誤: unexpected '?'
- Cannot use object of type stdClass as array
- Invalid argument supplied for foreach()
- 常量上傳
- 命名空間extend_email_Aindex
- Validate
- 'cross-env' 不是內部或外部命令,也不是可運行的程序
- 內置規則
- composer self-update
- cURL error 60: SSL certificate problem
- GuzzleHttp_Client_cookie_true
- cookies原始字符串轉換為數組
- 設置cookie
- apidoc
- 原生安裝tp5
- array_unique
- explode
- tp3修改密碼
- tp打印SQL
- tp5一對一關聯
- allowField
- array_column
- array_key_exists
- array_search
- tp5如何引入自定義函數
- with
- with閉包
- 綁定類
- composer A
- array_filter用回調函數過濾數組中的元素
- array_keys
- array_slice截取前兩個
- fetch_assoc
- in_array是否存在指定的值
- is_null
- join
- krsort對數組排序
- array-udiff
- shuffle
- substr
- unset刪除多維數組key
- 多維轉一維函數
- 數組變成字符串implode
- 數組分割
- 數組取差集
- 隨機函數array_rand
- 一維變二維
- 字符串包裹變量
- 字符串漢字截取mb_substr
- 直接使用composer命令
- 安裝vendor
- composer命令
- 復制安裝
- 空目錄安裝
- tp5cms
- tp5調試
- tp3調試
- TP5一對一關聯
- SQL語句
- 清空數據
- 去重
- 去重保留最小id
- 去重匹配除數字外數據
- 事務
- tp5pdf亂碼
- tp5column_tp3getFieldtrue
- php代碼在線測試,php在線執行
- parent::_initialize