принадлежит ToMany с несколькими таблицами (предложение дизайна)

Я столкнулся с этой проблемой в массиве с ключами «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";
    }
}
0
задан Jaeger 21 March 2019 в 22:59
поделиться

1 ответ

Это кажется хорошим примером для 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 .

0
ответ дан Matt C 21 March 2019 в 22:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: