Я столкнулся с этой проблемой в массиве с ключами «0» и «». Это означало, что я не мог проверить ключи массива с помощью == или ===.
$array=array(''=>'empty', '0'=>'zero', '1'=>'one');
echo "Test 1\n";
foreach ($array as $key=>$value) {
if ($key == '') { // Error - wrongly finds '0' as well
echo "$value\n";
}
}
echo "Test 2\n";
foreach ($array as $key=>$value) {
if ($key === '0') { // Error - doesn't find '0'
echo "$value\n";
}
}
Обходной путь заключается в том, чтобы использовать ключи массива обратно в строки перед использованием.
echo "Test 3\n";
foreach ($array as $key=>$value) {
if ((string)$key == '') { // Cast back to string - fixes problem
echo "$value\n";
}
}
echo "Test 4\n";
foreach ($array as $key=>$value) {
if ((string)$key === '0') { // Cast back to string - fixes problem
echo "$value\n";
}
}
Это кажется хорошим примером для MorphToMany https://laravel.com/docs/5.8/eloquent-relationships#many-to-many-polymorphic-relations
class Actor
public function movies()
{
return $this->morphedByMany(MovieModel::class,'media',"actors_relationship");
}
/// Add a the count to the query
public function scopeWithRelationsCount($q)
{
/// this is needed to so we keep the select of all the table columns too
if(!$q->getQuery()->columns){
$q->select($this->getTable().'.*');
}
return $q->selectSub(
ActorRelationship::selectRaw('count(*)')->whereColumn('actor_id', 'actors.id'),
'relations_count' /// the alias we are using could be anything
)
}
[ 115] Затем, если вы хотите, чтобы общее количество серий, фильмов и аниме для каждого актера, заказанного большинством, вы можете использовать. Actor::withRelationsCount()->orderBy('relations')->get()
Есть некоторые макросы, которые делают этот вид немного приятнее. Взгляните на https://github.com/reinink/advanced-eloquent .