gpt4 book ai didi

php - 我可以在 Laravel 模型中有一个字段将多个 MySQL 列组合成一个数组吗

转载 作者:行者123 更新时间:2023-11-29 02:18:35 27 4
gpt4 key购买 nike

我目前正在尝试根据类(class)列表和类(class)部分构建 Laravel 模型。对于类(class)部分数据库表中的每条记录,一周中的每一天都有 7 列。

CourseID|SectionNumber|...|Mon|Tue|Wed|Thu|Fri|Sat|Sun|
-------------------------------------------------------
1001 | 01 |...|Mon| 0 |Wed| 0 | 0 | 0 | 0 |

不可否认,它不是设计最好的数据库(它可能应该是 bool 值,并且作为关系表而不是在同一个大表中也可能有意义)但我无法直接控制那部分。

但我想做的是将所有这些天数存储在一个数组中,该数组位于类(class)模型中的一个值 $days 下,但是我不太确定该去哪里。我的最终目标是能够将 CourseSection 模型序列化为 JSON 提要。

$course->days;
//should return [Mon, Wed]

现在,在我的 CourseController 中,我有以下代码构造该数组,因为它基于原始查询将它提供给 View

$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 中,让模型作为数据库结构的直接表示?

最佳答案

您可以使用 Accessors and Mutators将额外数据附加到 Eloquent 模型。

<?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;
}
}

然后您可以在您的 Controller 中引用这个新项目而无需额外的工作:

$course = Course::find(1);
$array = $course->days; // This value will come from the getDaysAttribute() value in the Eloquent model

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


或者,如果您想修改数据库结构,可以考虑使用 Array Casting这将自动序列化/反序列化一个数组,以便在数据库中存储为文本。

关于php - 我可以在 Laravel 模型中有一个字段将多个 MySQL 列组合成一个数组吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35486906/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com