thinkphp 关联模型

模型定义:

[pcsh lang="php" tab_size="4" message="" hl_lines="" provider="manual"]

namespace Home\Model;
use Think\Model\RelationModel;

class TestModel extends RelationModel{
    // 默认表名
    protected $tableName = 'a'; 
    // 关联定义
    protected $_link = array(
        // 关联1
        'Userrent' => array(
            'mapping_type'  =>  self::HAS_ONE,
            'class_name'    =>  'B',
            'mapping_name'  =>  'mapping_b',
            'foreign_key'   =>  'bid',
        ),
        
        // 关联2
        'Class' =>array(
            'mapping_type'  =>  self::HAS_ONE,
            'class_name'    =>  'c',
            'mapping_name'  =>  'mapping_c',
            'foreign_key'   =>  'cid',
        ),
        
        // 关联3
        'school' => array(
            'mapping_type' => self::HAS_ONE,
            'class_name' => 'd',
            'foreign_key' => 'did'
        ),
    );
}

[/pcsh]

使用实例:

[pcsh lang="php" tab_size="4" message="" hl_lines="" provider="manual"]

namespace Home\Controller;
use Think\Controller;

class IndexController extends Controller {
    public function index(){
        $test = D('Test');
        $i = time();
        $data = array(
            'id' => $i,
            'name' => 'king',
            'mapping_b' => array(
                'class' => rand(1,10),
            ),
            'mapping_c' =>array(
                'grade' => 9,
            ),
            'school' => array(
                'school' => 'test school',
            ),
        );
        $result = $test->relation('school')->add($data);
        $arr = $test->relation(true)->select();
        var_dump($arr);
    }
}

[/pcsh]

原文地址:

http://document.thinkphp.cn/manual_3_2.html#relation_model

注意事项:

1,关联定义中有三个比较重要 mapping_type(tp模型关联类型),class_name(关联表名),foreign_key(外键,即关联表中与当前表主键如id值相同的字段)

2,mapping_name 为  读写数据  时键名,当mapping_name在模型中定义时,会使用模型中定义关联时的键作为mapping_name,实践表明,当你定义了这个mapping_name时,读写数据一定要用mapping_name,关联定义中的键反而变得不那么重要了

3,调用时,relation方法中的参数应该为true或者mapping_name,true的话会根据数据中的键自动匹配,如果手动写出了mapping_name,那么不会操作多余的关联,数据数组中使用的key必须是mapping_name

此处评论已关闭