Код: Выделить всё
/** @test */
public function set_shift_on_given_availability_to_a_candidate()
{
$candidate = $this->createCandidateWithFixedAvailability(pow(2, 3) - 1);
$candidate->availabilities[0]->setShift(App\Availability::SHIFT_TYPES['AM']);
$candidateShifts = $candidate->availabilities[0]->shifts;
$this->assertEquals(count($candidateShifts), 1);
$this->assertTrue(in_array('AM', $candidateShifts));
}
Код: Выделить всё
>>> $candidate->availabilities()->first()->shifts();
=> [
"AM",
]
>>> $candidate->availabilities()->first()->setShift(App\Availability::SHIFT_TYPES['PM']);
=> null
>>> $candidate->availabilities()->first()->shifts();
=> [
"PM",
]
Код: Выделить всё
public function setShift(...$shiftTypes)
{
\DB::table($this->table)
->where([
['candidate_id', '=', $this->candidate_id],
['day_of_week_id', '=', $this->day_of_week_id]
])
->update(['shifts' => array_sum ($shiftTypes)]);
}
public function shifts()
{
$namedShifts = [];
foreach (Availability::SHIFT_TYPES as $key => $val) {
if($this->shifts & $val) {
array_push($namedShifts, $key);
}
}
return $namedShifts;
}
Из того, что я вижу, использование построителя запросов к БД для обновления столбца, а затем получение динамического свойства этого столбца не отражает изменение обновления, поэтому либо я получаю его с помощью построителя запросов, либо присваиваю значение сдвига динамическому свойству. в функции setShift при успешном запуске обновления. Просто странно, что динамическое свойство корректно обновляется в Tinker, но не в phpunit.
Подробнее здесь: https://stackoverflow.com/questions/388 ... -reflected
Мобильная версия