Eloquent āĻ¸āĻ™ā§āĻ—ā§‡ āĻĻāĻ°āĻ•āĻžāĻ°ā§€ āĻ­āĻžāĻ¨ā§āĻĄāĻžāĻ°?

āĻ—āĻ¤ āĻ¸āĻĒā§āĻ¤āĻžāĻšā§‡ āĻ˛āĻŋāĻ–ā§‡āĻ›āĻŋāĻ˛āĻžāĻŽ āĻŦāĻžāĻ—ā§āĻŽā§€ āĻ¸āĻ¤ā§āĻ¤āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ°āĻŋāĻĒā§‹āĻœāĻŋāĻŸāĻ°āĻŋ āĻŸā§‡āĻŽāĻĒā§āĻ˛ā§‡āĻŸā§‡āĻ° āĻ…āĻ•ā§‡āĻœā§‹āĻ¤āĻž āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§, āĻ¯āĻžāĻ‡āĻšā§‹āĻ•, āĻ¤āĻŋāĻ¨āĻŋ āĻ†āĻŽāĻžāĻ•ā§‡ āĻŦāĻ˛āĻžāĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋ āĻĻāĻŋāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛ā§‡āĻ¨ āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻ†āĻ‚āĻļāĻŋāĻ•āĻ­āĻžāĻŦā§‡ āĻ¤āĻžāĻ° āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻŸāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŦā§‡āĻ¨āĨ¤ āĻāĻŸāĻŋ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻŽāĻŋ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻāĻ‡ āĻŸā§‡āĻŽāĻĒā§āĻ˛ā§‡āĻŸāĻŸāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒāĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻ¤āĻž āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ āĻ•āĻ°āĻžāĻ° āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°āĻŦāĨ¤ āĻāĻ•āĻŸāĻŋ āĻ¸āĻ‚āĻ—ā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¨ā§āĻ¯ā§‚āĻ¨āĻ¤āĻŽ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ° āĻ¸ā§‡āĻŸ:

<?php
interface PostRepository
{
    public function getById($id): Post;
    public function save(Post $post);
    public function delete($id);
}

āĻ¯āĻžāĻ‡āĻšā§‹āĻ•, āĻŦāĻžāĻ¸ā§āĻ¤āĻŦ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒāĻ—ā§āĻ˛āĻŋāĻ¤ā§‡, āĻ¯āĻĻāĻŋ āĻ¸āĻ‚āĻ—ā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛āĻ—ā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨ā§‡āĻ“āĻ¯āĻŧāĻž āĻšāĻ¯āĻŧ, āĻ°ā§‡āĻ•āĻ°ā§āĻĄ āĻĒā§āĻ¨āĻ°ā§āĻĻā§āĻ§āĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ—ā§āĻ˛āĻŋ āĻĒā§āĻ°āĻžāĻ¯āĻŧāĻļāĻ‡ āĻ¤āĻžāĻĻā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¯ā§āĻ•ā§āĻ¤ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ:

<?php
interface PostRepository
{
    public function getById($id): Post;
    public function save(Post $post);
    public function delete($id);

    public function getLastPosts();
    public function getTopPosts();
    public function getUserPosts($userId);
}

āĻāĻ‡ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ—ā§āĻ˛āĻŋ āĻ‡āĻ˛ā§‹āĻ•ā§āĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻ¸ā§āĻ•ā§‹āĻĒā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡, āĻ¤āĻŦā§‡ āĻ¨āĻŋāĻœā§‡āĻĻā§‡āĻ°āĻ•ā§‡ āĻ†āĻ¨āĻžāĻ° āĻĻāĻžāĻ¯āĻŧāĻŋāĻ¤ā§āĻŦ āĻ¨āĻŋāĻ¯āĻŧā§‡ āĻ¸āĻ¤ā§āĻ¤āĻž āĻ•ā§āĻ˛āĻžāĻ¸āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻ“āĻ­āĻžāĻ°āĻ˛ā§‹āĻĄ āĻ•āĻ°āĻž āĻ¸āĻ°ā§āĻŦā§‹āĻ¤ā§āĻ¤āĻŽ āĻ§āĻžāĻ°āĻŖāĻž āĻ¨āĻ¯āĻŧ āĻāĻŦāĻ‚ āĻāĻ‡ āĻĻāĻžāĻ¯āĻŧāĻŋāĻ¤ā§āĻŦāĻŸāĻŋāĻ•ā§‡ āĻ¸āĻ‚āĻ—ā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ āĻ•ā§āĻ˛āĻžāĻ¸ā§‡ āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ°āĻŋāĻ¤ āĻ•āĻ°āĻž āĻ¯ā§ŒāĻ•ā§āĻ¤āĻŋāĻ• āĻŦāĻ˛ā§‡ āĻŽāĻ¨ā§‡ āĻšāĻ¯āĻŧāĨ¤ āĻ¤āĻžāĻ‡ āĻ¨āĻžāĻ•āĻŋ? āĻ†āĻŽāĻŋ āĻŦāĻŋāĻļā§‡āĻˇāĻ­āĻžāĻŦā§‡ āĻāĻ‡ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸āĻŸāĻŋāĻ•ā§‡ āĻĻā§āĻŸāĻŋ āĻ…āĻ‚āĻļā§‡ āĻŦāĻŋāĻ­āĻ•ā§āĻ¤ āĻ•āĻ°ā§‡āĻ›āĻŋāĨ¤ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ° āĻĒā§āĻ°āĻĨāĻŽ āĻ…āĻ‚āĻļ āĻ˛ā§‡āĻ–āĻžāĻ° āĻ•āĻžāĻœā§‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻšāĻŦā§‡āĨ¤

āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āĻ˛ā§‡āĻ–āĻžāĻ° āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨ āĻšāĻ˛:

  • āĻāĻ•āĻŸāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻŦāĻ¸ā§āĻ¤ā§ āĻāĻŦāĻ‚ āĻšā§āĻ¯āĻžāĻ˛ā§‡āĻžā§āĻœ āĻ¨āĻŋāĻ°ā§āĻŽāĻžāĻŖ āĻĒā§‹āĻ¸ā§āĻŸ āĻ°āĻŋāĻĒā§‹āĻœāĻŋāĻŸāĻ°āĻŋ:: āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°ā§āĻ¨
  • PostRepository::getById, āĻ¸āĻ¤ā§āĻ¤āĻž āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĒā§āĻ˛ā§‡āĻļāĻ¨ āĻāĻŦāĻ‚ āĻ¤āĻ˛āĻŦ āĻĒā§‹āĻ¸ā§āĻŸ āĻ°āĻŋāĻĒā§‹āĻœāĻŋāĻŸāĻ°āĻŋ:: āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°ā§āĻ¨
  • āĻšā§āĻ¯āĻžāĻ˛ā§‡āĻžā§āĻœ PostRepository::delete

āĻ˛ā§‡āĻ–āĻžāĻ° āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ•āĻ˛āĻžāĻĒāĻ—ā§āĻ˛āĻŋ āĻ†āĻ¨āĻžāĻ° āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ¨āĻžāĨ¤ āĻ°āĻŋāĻĄ āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨ā§‡, āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° get* āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻĒāĻĄāĻŧāĻ˛ā§‡ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ āĻŦāĻŋāĻ­āĻžāĻœāĻ¨ āĻ¨ā§€āĻ¤āĻŋ (āĻšāĻŋāĻ āĻŋ I в āĻ•āĻ āĻŋāĻ¨), āĻ¤āĻžāĻšāĻ˛ā§‡ āĻāĻŸāĻž āĻĒāĻ°āĻŋāĻˇā§āĻ•āĻžāĻ° āĻšāĻ¯āĻŧā§‡ āĻ¯āĻžāĻŦā§‡ āĻ¯ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ āĻ…āĻ¨ā§‡āĻ• āĻŦāĻĄāĻŧ āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āĻ¤āĻ¤ āĻĻā§āĻŸāĻŋ āĻ­āĻŋāĻ¨ā§āĻ¨ āĻĻāĻžāĻ¯āĻŧāĻŋāĻ¤ā§āĻŦ āĻĒāĻžāĻ˛āĻ¨ āĻ•āĻ°ā§‡āĨ¤ āĻāĻŸāĻž āĻĻā§āĻ‡ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ­āĻžāĻ— āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ. āĻĒāĻĻā§āĻ§āĻ¤āĻŋ getById āĻ‰āĻ­āĻ¯āĻŧ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡āĻ‡ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧ, āĻ¤āĻŦā§‡ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻŸāĻŋ āĻ†āĻ°āĻ“ āĻœāĻŸāĻŋāĻ˛ āĻšāĻ“āĻ¯āĻŧāĻžāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻžāĻĨā§‡ āĻāĻ° āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻ­āĻŋāĻ¨ā§āĻ¨ āĻšāĻŦā§‡āĨ¤ āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻŸā§ āĻĒāĻ°ā§‡ āĻāĻŸāĻŋ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻšāĻŦā§‡. āĻ†āĻŽāĻŋ āĻĒā§‚āĻ°ā§āĻŦāĻŦāĻ°ā§āĻ¤ā§€ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§‡ āĻ˛ā§‡āĻ–āĻžāĻ° āĻ…āĻ‚āĻļāĻŸāĻŋāĻ° āĻ…āĻ•ā§‡āĻœā§‹āĻ¤āĻž āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ˛āĻŋāĻ–ā§‡āĻ›āĻŋāĻ˛āĻžāĻŽ, āĻ¤āĻžāĻ‡ āĻāĻ‡āĻŸāĻŋāĻ¤ā§‡ āĻ†āĻŽāĻŋ āĻāĻŸāĻŋ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ­ā§āĻ˛ā§‡ āĻ¯āĻžāĻŦāĨ¤

āĻĒāĻ āĻŋāĻ¤ āĻ…āĻ‚āĻļāĻŸāĻŋ āĻ†āĻŽāĻžāĻ° āĻ•āĻžāĻ›ā§‡ āĻāĻ¤āĻŸāĻž āĻ…āĻ•ā§‡āĻœā§‹ āĻŦāĻ˛ā§‡ āĻŽāĻ¨ā§‡ āĻšāĻšā§āĻ›ā§‡ āĻ¨āĻž, āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻ‡āĻ˛ā§‹āĻ•ā§āĻ¯āĻŧā§‡āĻ¨ā§āĻŸā§‡āĻ° āĻœāĻ¨ā§āĻ¯āĻ“ āĻāĻ–āĻžāĻ¨ā§‡ āĻŦā§‡āĻļ āĻ•āĻ¯āĻŧā§‡āĻ•āĻŸāĻŋ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻĨāĻžāĻ•āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻ•ā§āĻ˛āĻžāĻ¸ā§‡āĻ° āĻ¨āĻžāĻŽ āĻ•āĻŋ āĻ°āĻžāĻ–āĻŦ? āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°āĻž ReadPostRepository, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻŸā§‡āĻŽāĻĒā§āĻ˛ā§‡āĻŸ āĻ¸āĻ‚āĻ—ā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§‡āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ¤āĻŋāĻ¨āĻŋ āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡ āĻ¸āĻžāĻŽāĻžāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻžāĻ¸āĻ™ā§āĻ—āĻŋāĻ•āĻ¤āĻž āĻ†āĻ›ā§‡. āĻ†āĻĒāĻ¨āĻŋ āĻļā§āĻ§ā§ āĻĒāĻžāĻ°ā§‡āĻ¨ āĻĒā§‹āĻ¸ā§āĻŸ āĻ•ā§‹āĻ¯āĻŧā§‡āĻ°āĻŋ:

<?php
interface PostQueries
{
    public function getById($id): Post;
    public function getLastPosts();
    public function getTopPosts();
    public function getUserPosts($userId);
}

Eloquent āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻāĻŸāĻŋ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻ•āĻ°āĻž āĻŦā§‡āĻļ āĻ¸āĻšāĻœ:

<?php
final class EloquentPostQueries implements PostQueries
{
    public function getById($id): Post
    {
        return Post::findOrFail($id);
    }

    /**
    * @return Post[] | Collection
    */
    public function getLastPosts()
    {
        return Post::orderBy('created_at', 'desc')
            ->limit(/*some limit*/)
            ->get();
    }
    /**
    * @return Post[] | Collection
    */
    public function getTopPosts()
    {
        return Post::orderBy('rating', 'desc')
            ->limit(/*some limit*/)
            ->get();
    }

    /**
    * @param int $userId
    * @return Post[] | Collection
    */
    public function getUserPosts($userId)
    {
        return Post::whereUserId($userId)
            ->orderBy('created_at', 'desc')
            ->get();
    }
}

āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸āĻŸāĻŋ āĻ…āĻŦāĻļā§āĻ¯āĻ‡ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¯ā§āĻ•ā§āĻ¤ āĻšāĻ¤ā§‡ āĻšāĻŦā§‡, āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ āĻ‡āĻ¨ āĻ…ā§āĻ¯āĻžāĻĒāĻ¸āĻžāĻ°ā§āĻ­āĻŋāĻ¸ āĻĒā§āĻ°ā§‹āĻ­āĻžāĻ‡āĻĄāĻžāĻ°:

<?php
final class AppServiceProvider extends ServiceProvider 
{
    public function register()
    {
        $this->app->bind(PostQueries::class, 
            EloquentPostQueries::class);
    }
}

āĻāĻ‡ āĻ•ā§āĻ˛āĻžāĻ¸ āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡ āĻĻāĻ°āĻ•āĻžāĻ°ā§€. āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻ• āĻŦāĻž āĻ¸āĻ¤ā§āĻ¤āĻž āĻļā§āĻ°ā§‡āĻŖā§€āĻ•ā§‡ āĻ‰āĻĒāĻļāĻŽ āĻ•āĻ°ā§‡ āĻ¸ā§‡ āĻ¤āĻžāĻ° āĻĻāĻžāĻ¯āĻŧāĻŋāĻ¤ā§āĻŦ āĻ‰āĻĒāĻ˛āĻŦā§āĻ§āĻŋ āĻ•āĻ°ā§‡āĨ¤ āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ¯āĻŧāĻžāĻŽāĻ• āĻāĻŸāĻŋ āĻāĻ‡ āĻŽāĻ¤ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡:

<?php
final class PostsController extends Controller
{
    public function lastPosts(PostQueries $postQueries)
    {
        return view('posts.last', [
            'posts' => $postQueries->getLastPosts(),
        ]);
    }
} 

āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻĒā§‹āĻ¸ā§āĻŸ āĻ•āĻ¨ā§āĻŸā§āĻ°ā§‹āĻ˛āĻžāĻ°::āĻ˛āĻžāĻ¸ā§āĻŸāĻĒā§‹āĻ¸ā§āĻŸ āĻļā§āĻ§ā§ āĻ•āĻŋāĻ›ā§ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻœāĻŋāĻœā§āĻžāĻžāĻ¸āĻž āĻĒā§‹āĻ¸ā§āĻŸ āĻ•ā§‹āĻ¯āĻŧā§‡āĻ°āĻŋ āĻāĻŦāĻ‚ āĻāĻŸāĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡āĨ¤ āĻĒā§āĻ°āĻĻāĻžāĻ¨āĻ•āĻžāĻ°ā§€ āĻ†āĻŽāĻ°āĻž āĻ˛āĻŋāĻ™ā§āĻ• āĻĒā§‹āĻ¸ā§āĻŸ āĻ•ā§‹āĻ¯āĻŧā§‡āĻ°āĻŋ āĻ•ā§āĻ˛āĻžāĻ¸ āĻ¸āĻš āĻŦāĻžāĻ—ā§āĻŽā§€ āĻĒā§‹āĻˇā§āĻŸ āĻĒā§āĻ°āĻļā§āĻ¨āĻžāĻŦāĻ˛ā§€ āĻāĻŦāĻ‚ āĻāĻ‡ āĻļā§āĻ°ā§‡āĻŖā§€āĻŸāĻŋ āĻ•āĻ¨ā§āĻŸā§āĻ°ā§‹āĻ˛āĻžāĻ°ā§‡ āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻŋāĻ¤ āĻšāĻŦā§‡āĨ¤

āĻ†āĻ¸ā§āĻ¨ āĻ•āĻ˛ā§āĻĒāĻ¨āĻž āĻ•āĻ°āĻŋ āĻ¯ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻŸāĻŋ āĻ–ā§āĻŦ āĻœāĻ¨āĻĒā§āĻ°āĻŋāĻ¯āĻŧ āĻšāĻ¯āĻŧā§‡ āĻ‰āĻ ā§‡āĻ›ā§‡āĨ¤ āĻĒā§āĻ°āĻ¤āĻŋ āĻŽāĻŋāĻ¨āĻŋāĻŸā§‡ āĻšāĻžāĻœāĻžāĻ° āĻšāĻžāĻœāĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€ āĻ¸āĻ°ā§āĻŦāĻļā§‡āĻˇ āĻĒā§āĻ°āĻ•āĻžāĻļāĻ¨āĻž āĻ¸āĻš āĻĒā§ƒāĻˇā§āĻ āĻžāĻŸāĻŋ āĻ–ā§āĻ˛āĻ›ā§‡āĻ¨āĨ¤ āĻ¸āĻ°ā§āĻŦāĻžāĻ§āĻŋāĻ• āĻœāĻ¨āĻĒā§āĻ°āĻŋāĻ¯āĻŧ āĻĒā§āĻ°āĻ•āĻžāĻļāĻ¨āĻžāĻ—ā§āĻ˛āĻŋāĻ“ āĻĒā§āĻ°āĻžāĻ¯āĻŧāĻļāĻ‡ āĻĒāĻĄāĻŧāĻž āĻšāĻ¯āĻŧāĨ¤ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸āĻ—ā§āĻ˛āĻŋ āĻāĻ‡ āĻ§āĻ°āĻ¨ā§‡āĻ° āĻ˛ā§‹āĻĄāĻ—ā§āĻ˛āĻŋ āĻ–ā§āĻŦ āĻ­āĻžāĻ˛āĻ­āĻžāĻŦā§‡ āĻĒāĻ°āĻŋāĻšāĻžāĻ˛āĻ¨āĻž āĻ•āĻ°ā§‡ āĻ¨āĻž, āĻ¤āĻžāĻ‡ āĻ¤āĻžāĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻ†āĻĻāĻ°ā§āĻļ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ - āĻāĻ•āĻŸāĻŋ āĻ•ā§āĻ¯āĻžāĻļā§‡āĨ¤ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ āĻ›āĻžāĻĄāĻŧāĻžāĻ“, āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ•āĻ˛āĻžāĻĒā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻĒā§āĻŸāĻŋāĻŽāĻžāĻ‡āĻœ āĻ•āĻ°āĻž āĻ¸ā§āĻŸā§‹āĻ°ā§‡āĻœā§‡ āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻĄā§‡āĻŸāĻž āĻ¸ā§āĻ¨ā§āĻ¯āĻžāĻĒāĻļāĻŸ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ - memcached āĻŦāĻž āĻĒā§āĻ¨āĻ°āĻžāĻŦā§ƒāĻ¤ā§āĻ¤āĻŋ.

āĻ•ā§āĻ¯āĻžāĻļāĻŋāĻ‚ āĻ˛āĻœāĻŋāĻ• āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤ āĻāĻ¤āĻŸāĻž āĻœāĻŸāĻŋāĻ˛ āĻ¨āĻ¯āĻŧ, āĻ¤āĻŦā§‡ EloquentPostQueries-āĻ āĻāĻŸāĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°āĻž āĻ–ā§āĻŦ āĻ¸āĻ āĻŋāĻ• āĻ¨āĻ¯āĻŧ (āĻ¯āĻĻāĻŋ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ•āĻžāĻ°āĻŖ āĻāĻ•āĻ• āĻĻāĻžāĻ¯āĻŧāĻŋāĻ¤ā§āĻŦā§‡āĻ° āĻ¨ā§€āĻ¤āĻŋ) āĻŸā§‡āĻŽāĻĒā§āĻ˛ā§‡āĻŸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻ…āĻ¨ā§‡āĻ• āĻŦā§‡āĻļāĻŋ āĻ¸ā§āĻŦāĻžāĻ­āĻžāĻŦāĻŋāĻ• āĻĄā§‡āĻ•ā§‹āĻ°ā§‡āĻŸāĻ° āĻāĻŦāĻ‚ āĻŽā§‚āĻ˛ āĻ•āĻ°ā§āĻŽā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻœā§āĻœāĻž āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ•ā§āĻ¯āĻžāĻļāĻŋāĻ‚ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°ā§āĻ¨:

<?php
use IlluminateContractsCacheRepository;

final class CachedPostQueries implements PostQueries
{
    const LASTS_DURATION = 10;

    /** @var PostQueries */
    private $base;

    /** @var Repository */
    private $cache;

    public function __construct(
        PostQueries $base, Repository $cache) 
    {
        $this->base = $base;
        $this->cache = $cache;
    }

    /**
    * @return Post[] | Collection
    */
    public function getLastPosts()
    {
        return $this->cache->remember('last_posts', 
            self::LASTS_DURATION, 
            function(){
                return $this->base->getLastPosts();
            });
    }

    // Đ´Ņ€ŅƒĐŗиĐĩ ĐŧĐĩŅ‚ОдŅ‹ ĐŋŅ€Đ°ĐēŅ‚иŅ‡ĐĩŅĐēи Ņ‚Đ°ĐēиĐĩ ĐļĐĩ
}

āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ āĻ‰āĻĒā§‡āĻ•ā§āĻˇāĻž āĻ•āĻ°ā§āĻ¨ āĻ¸āĻ‚āĻ—ā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§‡āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ¨āĻ¸ā§āĻŸā§āĻ°āĻžāĻ•ā§āĻŸāĻ°ā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ•āĻŋāĻ›ā§ āĻ…āĻœāĻžāĻ¨āĻž āĻ•āĻžāĻ°āĻŖā§‡, āĻ¤āĻžāĻ°āĻž āĻ˛āĻžāĻ°āĻžāĻ­ā§‡āĻ˛ā§‡ āĻ•ā§āĻ¯āĻžāĻļā§‡ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ā§‡āĻ° āĻ¨āĻžāĻŽāĻ•āĻ°āĻŖ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨āĻŋāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤

КĐģĐ°ŅŅ āĻ•ā§āĻ¯āĻžāĻļā§‡āĻĄāĻĒā§‹āĻ¸ā§āĻŸ āĻ•ā§‹āĻ¯āĻŧā§‡āĻ°āĻŋ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ•ā§āĻ¯āĻžāĻļāĻŋāĻ‚ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°ā§‡āĨ¤ $this->cache->āĻŽāĻ¨ā§‡ āĻ°āĻžāĻ–āĻŦā§‡āĻ¨ āĻāĻ‡ āĻāĻ¨ā§āĻŸā§āĻ°āĻŋāĻŸāĻŋ āĻ•ā§āĻ¯āĻžāĻļā§‡ āĻ†āĻ›ā§‡ āĻ•āĻŋāĻ¨āĻž āĻ¤āĻž āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻ¯āĻĻāĻŋ āĻ¨āĻž āĻĨāĻžāĻ•ā§‡, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ•āĻ˛āĻŦā§āĻ¯āĻžāĻ• āĻ•āĻ˛ āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻ•ā§āĻ¯āĻžāĻļā§‡ āĻĢā§‡āĻ°āĻ¤ āĻĻā§‡āĻ“āĻ¯āĻŧāĻž āĻŽāĻžāĻ¨āĻŸāĻŋ āĻ˛āĻŋāĻ–ā§‡āĨ¤ āĻ¯āĻž āĻ…āĻŦāĻļāĻŋāĻˇā§āĻŸ āĻĨāĻžāĻ•ā§‡ āĻ¤āĻž āĻšāĻ˛ āĻāĻ‡ āĻļā§āĻ°ā§‡āĻŖā§€āĻŸāĻŋāĻ•ā§‡ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻŸāĻŋāĻ¤ā§‡ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻ•āĻ°āĻžāĨ¤ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ā§‡āĻ° āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻŸāĻŋāĻ¤ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ•ā§āĻ˛āĻžāĻ¸ āĻĻāĻ°āĻ•āĻžāĻ° āĻĒā§‹āĻ¸ā§āĻŸ āĻ•ā§‹āĻ¯āĻŧā§‡āĻ°āĻŋ āĻ•ā§āĻ˛āĻžāĻ¸ā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻĒā§‡āĻ¤ā§‡ āĻļā§āĻ°ā§ āĻ•āĻ°ā§‡ āĻ•ā§āĻ¯āĻžāĻļā§‡āĻĄāĻĒā§‹āĻ¸ā§āĻŸ āĻ•ā§‹āĻ¯āĻŧā§‡āĻ°āĻŋ. āĻ¤āĻŦā§‡ āĻ¤āĻŋāĻ¨āĻŋ āĻ¨āĻŋāĻœā§‡āĻ‡ āĻ•ā§āĻ¯āĻžāĻļā§‡āĻĄāĻĒā§‹āĻ¸ā§āĻŸ āĻ•ā§‹āĻ¯āĻŧā§‡āĻ°āĻŋ āĻ•āĻ¨āĻ¸ā§āĻŸā§āĻ°āĻžāĻ•ā§āĻŸāĻ°āĻ•ā§‡ āĻ…āĻŦāĻļā§āĻ¯āĻ‡ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻŸāĻžāĻ° āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻāĻ•āĻŸāĻŋ āĻ•ā§āĻ˛āĻžāĻ¸ āĻ—ā§āĻ°āĻšāĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ āĻŦāĻžāĻ—ā§āĻŽā§€ āĻĒā§‹āĻˇā§āĻŸ āĻĒā§āĻ°āĻļā§āĻ¨āĻžāĻŦāĻ˛ā§€āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ "āĻŦāĻžāĻ¸ā§āĻ¤āĻŦ" āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻ›āĻžāĻĄāĻŧāĻž āĻ•āĻžāĻœ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻ¨āĻžāĨ¤ āĻ†āĻŽāĻ°āĻž āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻŋāĻ¤ āĻšāĻ‡ āĻ…ā§āĻ¯āĻžāĻĒāĻ¸āĻžāĻ°ā§āĻ­āĻŋāĻ¸ āĻĒā§āĻ°ā§‹āĻ­āĻžāĻ‡āĻĄāĻžāĻ°:

<?php
final class AppServiceProvider extends ServiceProvider 
{
    public function register()
    {
        $this->app->bind(PostQueries::class, 
            CachedPostQueries::class);

        $this->app->when(CachedPostQueries::class)
            ->needs(PostQueries::class)
            ->give(EloquentPostQueries::class);
    }
}

āĻ†āĻŽāĻžāĻ° āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ‡āĻšā§āĻ›āĻž āĻĒā§āĻ°āĻĻāĻžāĻ¨āĻ•āĻžāĻ°ā§€āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻŦā§‡āĻļ āĻ¸ā§āĻŦāĻžāĻ­āĻžāĻŦāĻŋāĻ•āĻ­āĻžāĻŦā§‡ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻāĻ‡āĻ­āĻžāĻŦā§‡, āĻ†āĻŽāĻ°āĻž āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻ•āĻŸāĻŋ āĻ•ā§āĻ˛āĻžāĻ¸ āĻ˛āĻŋāĻ–ā§‡ āĻāĻŦāĻ‚ āĻ•āĻ¨ā§āĻŸā§‡āĻ‡āĻ¨āĻžāĻ° āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ•ā§āĻ¯āĻžāĻļāĻŋāĻ‚ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°ā§‡āĻ›āĻŋāĨ¤ āĻŦāĻžāĻ•āĻŋ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻ•ā§‹āĻĄ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĻ¨āĻŋ.

āĻ…āĻŦāĻļā§āĻ¯āĻ‡, āĻ•ā§āĻ¯āĻžāĻļāĻŋāĻ‚ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖāĻ°ā§‚āĻĒā§‡ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻāĻŸāĻŋ āĻ…āĻŦā§ˆāĻ§āĻ•āĻ°āĻŖ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°āĻžāĻ“ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻ¯āĻžāĻ¤ā§‡ āĻŽā§āĻ›ā§‡ āĻĢā§‡āĻ˛āĻž āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻŸāĻŋ āĻ•āĻŋāĻ›ā§ āĻ¸āĻŽāĻ¯āĻŧā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻžāĻ‡āĻŸā§‡ āĻā§āĻ˛ā§‡ āĻ¨āĻž āĻĨāĻžāĻ•ā§‡, āĻ¤āĻŦā§‡ āĻ…āĻŦāĻŋāĻ˛āĻŽā§āĻŦā§‡ āĻŽā§āĻ›ā§‡ āĻĢā§‡āĻ˛āĻž āĻšāĻ¯āĻŧāĨ¤ āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻāĻ—ā§āĻ˛ā§‹ āĻ›ā§‹āĻŸāĻ–āĻžāĻŸā§‹ āĻŦāĻŋāĻˇāĻ¯āĻŧāĨ¤

āĻ¨ā§€āĻšā§‡āĻ° āĻ˛āĻžāĻ‡āĻ¨: āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻ¨āĻ¯āĻŧ, āĻĻā§āĻŸāĻŋ āĻŸā§‡āĻŽāĻĒā§āĻ˛ā§‡āĻŸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡āĻ›āĻŋāĨ¤ āĻ¨āĻŽā§āĻ¨āĻž āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻ•ā§‹āĻ¯āĻŧā§‡āĻ°āĻŋ āĻ°ā§‡āĻ¸āĻĒāĻ¨āĻ¸āĻŋāĻŦāĻŋāĻ˛āĻŋāĻŸāĻŋ āĻ¸ā§‡āĻ—ā§āĻ°āĻŋāĻ—ā§‡āĻļāĻ¨ (CQRS) āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ āĻ¸ā§āĻ¤āĻ°ā§‡ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖāĻ°ā§‚āĻĒā§‡ āĻĒā§ƒāĻĨāĻ• āĻĒāĻ āĻ¨ āĻāĻŦāĻ‚ āĻ˛ā§‡āĻ–āĻžāĻ° āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ•āĻ˛āĻžāĻĒ āĻ•āĻ°āĻžāĻ° āĻĒā§āĻ°āĻ¸ā§āĻ¤āĻžāĻŦ āĻĻā§‡āĻ¯āĻŧāĨ¤ āĻ†āĻŽāĻŋ āĻ¤āĻžāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻāĻ¸ā§‡āĻ›āĻŋ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ āĻŦāĻŋāĻ­āĻžāĻœāĻ¨ āĻ¨ā§€āĻ¤āĻŋ, āĻ¯āĻž āĻĒāĻ°āĻžāĻŽāĻ°ā§āĻļ āĻĻā§‡āĻ¯āĻŧ āĻ¯ā§‡ āĻ†āĻŽāĻŋ āĻĻāĻ•ā§āĻˇāĻ¤āĻžāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¨āĻŋāĻĻāĻ°ā§āĻļāĻ¨ āĻāĻŦāĻ‚ āĻ¨ā§€āĻ¤āĻŋāĻ—ā§āĻ˛āĻŋ āĻĒāĻ°āĻŋāĻšāĻžāĻ˛āĻ¨āĻž āĻ•āĻ°āĻŋ āĻāĻŦāĻ‚ āĻāĻ•āĻŸāĻŋ āĻ‰āĻĒāĻĒāĻžāĻĻā§āĻ¯ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻāĻ•āĻŸāĻŋ āĻĨā§‡āĻ•ā§‡ āĻ…āĻ¨ā§āĻ¯āĻŸāĻŋ āĻ†āĻšāĻ°āĻŖ āĻ•āĻ°āĻŋ :) āĻ…āĻŦāĻļā§āĻ¯āĻ‡, āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒā§‡ āĻ¸āĻ¤ā§āĻ¤āĻž āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻšāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ‡ āĻœāĻžāĻ¤ā§€āĻ¯āĻŧ āĻŦāĻŋāĻŽā§‚āĻ°ā§āĻ¤āĻ¤āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻšāĻ¯āĻŧ āĻ¨āĻž, āĻ¤āĻŦā§‡ āĻ†āĻŽāĻŋ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ¸āĻžāĻĨā§‡ āĻ•ā§ŒāĻļāĻ˛āĻŸāĻŋ āĻ­āĻžāĻ— āĻ•āĻ°āĻŦā§ˇ āĻ†āĻŦā§‡āĻĻāĻ¨ā§‡āĻ° āĻĒā§āĻ°āĻžāĻĨāĻŽāĻŋāĻ• āĻĒāĻ°ā§āĻ¯āĻžāĻ¯āĻŧā§‡ āĻ‰āĻ¨ā§āĻ¨āĻ¯āĻŧāĻ¨, āĻ†āĻĒāĻ¨āĻŋ āĻ¸āĻšāĻœāĻ­āĻžāĻŦā§‡ āĻāĻ•āĻŸāĻŋ āĻ•ā§āĻ˛āĻžāĻ¸ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ āĻĒā§‹āĻ¸ā§āĻŸ āĻ•ā§‹āĻ¯āĻŧā§‡āĻ°āĻŋ Eloquent āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ¸ā§āĻŦāĻžāĻ­āĻžāĻŦāĻŋāĻ• āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ā§‡āĻ° āĻ¸āĻžāĻĨā§‡:

<?php
final class PostQueries
{
    public function getById($id): Post
    {
        return Post::findOrFail($id);
    }

    // Đ´Ņ€ŅƒĐŗиĐĩ ĐŧĐĩŅ‚ОдŅ‹
}

āĻ¯āĻ–āĻ¨ āĻ•ā§āĻ¯āĻžāĻļāĻŋāĻ‚āĻ¯āĻŧā§‡āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻĻā§‡āĻ–āĻž āĻĻā§‡āĻ¯āĻŧ, āĻ¤āĻ–āĻ¨ āĻāĻ•āĻŸāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻĒāĻĻāĻ•ā§āĻˇā§‡āĻĒā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻāĻ‡ āĻ•ā§āĻ˛āĻžāĻ¸ā§‡āĻ° āĻœāĻžāĻ¯āĻŧāĻ—āĻžāĻ¯āĻŧ āĻāĻ•āĻŸāĻŋ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ (āĻŦāĻž āĻŦāĻŋāĻŽā§‚āĻ°ā§āĻ¤ āĻļā§āĻ°ā§‡āĻŖā§€) āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ āĻĒā§‹āĻ¸ā§āĻŸ āĻ•ā§‹āĻ¯āĻŧā§‡āĻ°āĻŋ, āĻ•ā§āĻ˛āĻžāĻ¸ā§‡ āĻāĻ° āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻ•āĻĒāĻŋ āĻ•āĻ°ā§āĻ¨ āĻŦāĻžāĻ—ā§āĻŽā§€ āĻĒā§‹āĻˇā§āĻŸ āĻĒā§āĻ°āĻļā§āĻ¨āĻžāĻŦāĻ˛ā§€ āĻāĻŦāĻ‚ āĻ†āĻŽāĻŋ āĻ†āĻ—ā§‡ āĻŦāĻ°ā§āĻŖāĻŋāĻ¤ āĻ¸ā§āĻ•āĻŋāĻŽā§‡ āĻ¯āĻžāĻ¨āĨ¤ āĻŦāĻžāĻ•āĻŋ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻ•ā§‹āĻĄ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻ¨ā§‡āĻ‡.

āĻ•ā§āĻ˛āĻžāĻ¸, āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ āĻ¸āĻš āĻāĻ‡ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ•ā§ŒāĻļāĻ˛āĻ—ā§āĻ˛āĻŋ, āĻ‡āĻ¨āĻœā§‡āĻ•āĻļāĻ¨ āĻ¨āĻŋāĻ°ā§āĻ­āĻ°āĻ¤āĻž и āĻ¸āĻŋāĻ•āĻŋāĻ‰āĻ†āĻ°āĻāĻ¸ āĻ āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻ†āĻŽāĻžāĻ° āĻŦāĻ‡ "āĻœāĻŸāĻŋāĻ˛ āĻ“āĻ¯āĻŧā§‡āĻŦ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ā§‡āĻ° āĻ†āĻ°ā§āĻ•āĻŋāĻŸā§‡āĻ•āĻšāĻžāĻ°". āĻāĻ‡ āĻĒā§āĻ°āĻŦāĻ¨ā§āĻ§ā§‡āĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻ†āĻŽāĻžāĻ° āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ•ā§āĻ˛āĻžāĻ¸ āĻ•ā§‡āĻ¨ āĻšā§‚āĻĄāĻŧāĻžāĻ¨ā§āĻ¤ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻšāĻŋāĻšā§āĻ¨āĻŋāĻ¤ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¸ā§‡āĻ‡ āĻ§āĻžāĻāĻ§āĻžāĻ° āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨āĻ“ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ā§ˇ

āĻ‰āĻ¤ā§āĻ¸: www.habr.com

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨