栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在Laravel 5中将组合键放在模型中?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在Laravel 5中将组合键放在模型中?

我写了这个简单的PHP特性,以使Eloquent能够处理复合键:

<?phpnamespace AppModelTraits; // *** Adjust this to match your model namespace! ***use IlluminateDatabaseEloquentBuilder;trait HasCompositePrimaryKey{        public function getIncrementing()    {        return false;    }        protected function setKeysForSaveQuery(Builder $query)    {        foreach ($this->getKeyName() as $key) { // UPDATe: Added isset() per devflow's comment. if (isset($this->$key))     $query->where($key, '=', $this->$key); else     throw new Exception(__METHOD__ . 'Missing part of the primary key: ' . $key);        }        return $query;    }    // UPDATE: From jessedp. See his edit, below.        public static function find($ids, $columns = ['*'])    {        $me = new self;        $query = $me->newQuery();        foreach ($me->getKeyName() as $key) { $query->where($key, '=', $ids[$key]);        }        return $query->first($columns);    }}

将其放置在

Traits
主模型目录下的目录中,然后可以在任何复合键模型的顶部添加一个简单的单线:

class MyModel extends Eloquent {    use TraitsHasCompositePrimaryKey; // *** THIS!!! ***        protected $primaryKey = array('key1', 'key2');    ...

由jessedp补充:
在我想使用Model :: find之前,这对我一直很有效,因此以下是一些可以添加到上述hasCompositePrimaryKey特性中的代码(可能会更好):

protected static function find($id, $columns = ['*']){    $me = new self;    $query = $me->newQuery();    $i=0;    foreach ($me->getKeyName() as $key) {        $query->where($key, '=', $id[$i]);        $i++;    }    return $query->first($columns);}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/421586.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号