Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在eloquent中检索带零的数据_Php_Mysql_Laravel_Laravel 5_Eloquent - Fatal编程技术网

Php 如何在eloquent中检索带零的数据

Php 如何在eloquent中检索带零的数据,php,mysql,laravel,laravel-5,eloquent,Php,Mysql,Laravel,Laravel 5,Eloquent,我正在通过从数据库检索多个数据来创建一个学生编号 如课程号、年份号、学生号 为了检索相同的数字,我将我的原始学生号(在创建时给出)填写为0001,0002 当我试图从数据库中获取我的学生号时 我得到的结果没有零 比如说课程ID 22和年份代码16 和第0005号学生 我返回的数字为22165,应该是22160005。 这就是我获得学生的方式 $students = \App\Student::with('payment')->where('branch', $id)->get();

我正在通过从数据库检索多个数据来创建一个学生编号

课程号、年份号、学生号

为了检索相同的数字,我将我的原始学生号(在创建时给出)填写为0001,0002

当我试图从数据库中获取我的学生号时

我得到的结果没有零

比如说课程ID 22年份代码16

和第0005号学生

我返回的数字为22165,应该是22160005。 这就是我获得学生的方式

$students = \App\Student::with('payment')->where('branch', $id)->get();
(我通过下面的查询实际收到了不带零的学生号)

这就是我在blade中的写作方式

<td>{{$student->Course_ID.$student->course->year_code.$student->student_no}}  </td>
{{$student->Course\u ID.$student->Course->year\u code.$student->student\u no}

PS:我知道如何使用str_pad用原生php检索数字。我询问是否有一种方法可以在Eloquent上执行此操作。

在表中创建列作为STUDENT_NO INT(5)ZEROFILL,然后任何小于10000的数字在查询时都会根据需要使用前导零
例如,5将显示为00005,4124将显示为04124等。

没有雄辩的方法可以直接做到这一点,因此您需要自己添加一些逻辑

一种选择是将学生号作为字符串存储在数据库中,否则在PHP中作为整数获取时,零将丢失,因为PHP不关心您的零填充,并将0005视为5

另一个选项是在从数据库获取数据后,在PHP中手动附加零,例如,通过在模型中添加访问器:

public function getStudentNoAttribute() {
  return sprintf("%05d", $this->attributes['student_no']);
}
这样,每当您访问模型的student\u no属性时,它将自动转换为零填充字符串。

您可以为雄辩模型上的任何属性创建自定义。这允许您在返回该属性时修改该属性

创建访问器的惯例是创建一个以
get
开头的方法,然后添加属性名,然后添加
属性。例如,您可以调用一个
getStudentNoAttribute
。将此添加到学生模型:

function getStudentNoAttribute() {
    return str_pad($this->student_no,4,'0',STR_PAD_LEFT);
}

为每个要用零进行调整的属性添加这样的函数。然后,每次对
student
模型的实例调用
$student->student\u no
,它的格式都会正确。

接受的答案似乎不错,但需要将值传递给函数,否则会遇到一些问题。这可能是最近的变化,但我认为值得一提。因此,答案将是:

public function getStudentNoAttribute($value) {
    return sprintf("%05d", $value);
}
或者,正如他的回答所说:

function getStudentNoAttribute($value) {
    return str_pad($value,4,'0',STR_PAD_LEFT);
}

我确实用zerofill存储student_no,但检索数据时没有零。我实际上更喜欢用4个零的str_pad。我想知道native way on eloquent这样做是否也可以,谢谢str_pad。在我看来,上面的访问器是最好的方法。这就是自定义访问器在Eloquent中的作用——将来自数据库的任何内容转换为您希望在应用程序中使用的格式。getSTudentNoAttribute不应该接收参数吗?