首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以在Laravel中将多个MySQL列组合成一个数组吗?

可以在Laravel中将多个MySQL列组合成一个数组吗?
EN

Stack Overflow用户
提问于 2016-02-18 16:23:04
回答 2查看 75关注 0票数 2

目前,我正试图建立一个基于课程和课程部分列表的Laravel模型。对于课程节数据库表中的每条记录,每周的每一天都有7列。

代码语言:javascript
复制
CourseID|SectionNumber|...|Mon|Tue|Wed|Thu|Fri|Sat|Sun|
-------------------------------------------------------
  1001  |      01     |...|Mon| 0 |Wed| 0 | 0 | 0 | 0 |

诚然,它不是设计得最好的数据库(它可能应该是布尔型数据库,而且作为关系表也可能有意义,而不是在同一个大表中),但我对这部分没有直接的控制。

但是,我想要做的是,在课程模型中,将所有这些天都存储在一个值$days下的数组中,但是我不太确定该如何处理。我的最终目标是能够将CourseSection模型序列化为JSON。

代码语言:javascript
复制
$course->days;
//should return [Mon, Wed]

现在,在我的CourseController,中,我有下面的代码,在它根据原始查询将数组提供给视图时构造该数组

代码语言:javascript
复制
$days = array_where([$result->isMon, $result->isTue, $result->isWed, $result->isThu, $result->isFri, $result->isSat, $result->isSun], 
                       function ($key, $value)
    {
        return $value != "0";
    });

$courses[$course_key]['sections'][$result->section_number]->days = $days;

我想我的问题是我能在一个模型里做到这一切吗?是否有可能使变量相等于数组?还是应该留在Controller中,并将模型作为数据库中结构的直接表示?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-18 16:44:41

您可以使用访问器和变异器将额外的数据附加到雄辩的模型中。

代码语言:javascript
复制
<?php
namespace App;

use Illuminate\Database\Eloquent\Model as Eloquent;

class Course extends Eloquent
{
    protected $appends = ['days'];

    public function getDaysAttribute()
    {
        $values = [];
        // Build your array of data from your existing database structure here...
        return $values;
    }
}

然后,无需在控制器中进行额外的工作,就可以引用此新项:

代码语言:javascript
复制
$course = Course::find(1);
$array = $course->days; // This value will come from the getDaysAttribute() value in the Eloquent model

注意:我还没有测试过这段代码,但是我从我用Laravel5.1构建的一个项目中获得了它,它使用了这些方法。我还没有编写生成$values数组的代码,但是您应该能够根据现有代码将这些代码组合在一起。

或者,如果您想修改数据库结构,可以考虑使用阵列铸造,它将自动序列化/反序列化一个数组,以便将其存储为数据库中的文本。

票数 1
EN

Stack Overflow用户

发布于 2016-02-18 16:44:35

代码语言:javascript
复制
class Course extends Model {

    public $appends = ['days'];

    public function getDaysAttribute(){

        $days = ['Mon','Tue','Wed','Thu','Fri','Sat','Sun'];
        $course = this;
        return array_where($days,function($key, $val) use ($course)){
            return $course[$value] != 0;
        }

    }

}

然后可以使用$course->days,当您将days属性序列化到JSON时,days属性将由appends属性提供。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35486906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档