• 【渴求式加载】laravel中with()的使用(关联)


    测试了好半天才跑通,记录下自己的例子,以便查询使用:

    【Model】原模型 文章表 belongsTo 分类关系表

    <?php
    
    namespace AppModels;
    
    use IlluminateDatabaseEloquentModel;
    use IlluminateSupportFacadesDB;
    
    class Articles extends Model
    {
        protected $table = 'articles';
    
        public static function getValue($id)
        {
            return self::find($id)->toArray();
        }
    
        public function a_to_c()
        {
            return $this->hasOne('AppModelsClassificationArticles', 'article_id', 'id');
        }
    
        public function a_to_c2()
        {
            return $this->belongsTo('AppModelsClassificationArticles', 'id', 'article_id');
        }
    
        public function a_to_c3()
        {
            return $this->hasMany('AppModelsClassificationArticles', 'article_id', 'id');
        }
    
        /**
         * 返回侧边栏最新文章列表
         * @return mixed
         */
        public static function getNewList($num)
        {
            return self::select('*') -> join('classification_to_articles', 'classification_to_articles.article_id', '=', 'articles.id') -> orderBy('articles.created_at', 'desc') -> take($num) -> get() -> toArray();
        }
    
        /**
         * 返回侧边栏随机推荐文章列表
         * @param $num
         * @return IlluminateDatabaseEloquentBuilder[]|IlluminateDatabaseEloquentCollection
         */
        public static function getRandomList($num)
        {
            return self::with('a_to_c2') -> select('*') -> orderBy(DB::raw('RAND()')) -> take($num) -> get();
        }
    }

    关键语句:

        public function a_to_c2()
        {
            return $this->belongsTo('AppModelsClassificationArticles', 'id', 'article_id');
        }
    
    
        /**
         * 返回侧边栏随机推荐文章列表
         * @param $num
         * @return IlluminateDatabaseEloquentBuilder[]|IlluminateDatabaseEloquentCollection
         */
        public static function getRandomList($num)
        {
            return self::with('a_to_c2') -> select('*') -> orderBy(DB::raw('RAND()')) -> take($num) -> get();
        }

    结果:

     

     以前全toArray()转成数组,本次使用对象的方式:

    <?php
        $data_random = AppModelsArticles::getRandomList(8);
    ?>
    <div class="widget">
        <h3>随机推荐</h3>
    
        <hr>
        <ul class="hotComments">
            @foreach($data_random as $v)
            <li>
                <div class="hotComments-one-img">
                    <a href="/news/{{ $v -> a_to_c -> classification_id }}/{{ $v -> id }}.html" title="{{ $v -> title }}">
                        <img src="{{ $v -> img }}" alt="{{ $v -> title }}">
                    </a>
                </div>
                <div class="hotComments-recent-title">
                    <h4 class="title"><a href="/index.php?r=article/Content/index&content_id=126" title="{{ $v -> title }}">{{ $v -> title }}</a></h4>
    
                </div>
            </li>
            @endforeach
        </ul>
    </div>

    运行结果:

  • 相关阅读:
    try里有return,finally 里还会执行吗?
    OKR与KPI
    读阿里规范笔记
    Maven lifeCycle简要说明
    LK AH 技术对比
    HTTP请求 工具类
    HTTPS 流程
    指数基金投资指南-读书笔记
    mybatis-generator
    《富爸爸穷爸爸》---读后感
  • 原文地址:https://www.cnblogs.com/ichenchao/p/13035826.html
Copyright © 2020-2023  润新知