<commit_before><?php

namespace app\Models;

use core\Model;
use core\DB;

class Post extends Model
{
    /**
     * La tabla de la base de datos
     *
     * @var string
     */
    protected $table = 'posts';
    
    /**
     * Reglas para la validación
     * 
     * @return array
     */
    protected function rules()
    {
        return [
            'title'   => 'required|unique:'.$this->table.','.$this->id.'|max:255',
            'content' => 'required',
        ];
    }
    
    /**
     * Relacion con la tabla users. Obtiene
     * Todos los posts con su autor paginados
     * 
     * @return array
     */
    public static function withUsers()
    {
        $sql = 'SELECT posts.*, users.name as author ' 
             . 'FROM users ' 
             . 'RIGHT JOIN posts on users.id = posts.user_id ' 
             . 'ORDER BY id';
        
        $query = DB::query($sql);
        
        if ($query) {
            
            // Obtenemos el nombre del modelo, instanciamos la clase de colecciones y la clase de paginación
            $classname = get_called_class();
            $collection = new \core\Collection();
            $pagination = new \core\Paginator($query);

            foreach ($pagination->getResults() as $attributes) {
                // Instanciamos el item e indicamos que existe
                $item = new $classname($attributes);
                $item->exists = true;
                
                // Agregamos a la colección
                $collection->addItem($item);
            }
            
            // Los links para la paginación
            $collection->links = $pagination->getLinks();
            return $collection;
        }
        
        return false;
    }

}<commit_msg>Repasados comentarios de modelos<commit_after><?php

namespace app\Models;

use core\DB;
use core\Model;
use core\Paginator;
use core\Collection;

class Post extends Model
{
    /**
     * La tabla de la base de datos
     *
     * @var string
     */
    protected $table = 'posts';
    
    /**
     * Reglas para la validación
     * 
     * @return array
     */
    protected function rules()
    {
        return [
            'title'   => 'required|unique:'.$this->table.','.$this->id.'|max:255',
            'content' => 'required',
        ];
    }
    
    /**
     * Relacion con la tabla users. Obtiene
     * Todos los posts con su autor paginados
     * 
     * @return \core\Collection | bool
     */
    public static function withUsers()
    {
        $sql = 'SELECT posts.*, users.name as author ' 
             . 'FROM users ' 
             . 'RIGHT JOIN posts on users.id = posts.user_id ' 
             . 'ORDER BY id';
        
        $query = DB::query($sql);
        
        if ($query) {
            
            // Obtenemos el nombre del modelo, instanciamos la clase de colecciones y la clase de paginación
            $classname = get_called_class();
            $collection = new Collection();
            $pagination = new Paginator($query);

            foreach ($pagination->getResults() as $attributes) {
                // Instanciamos el item e indicamos que existe
                $item = new $classname($attributes);
                $item->exists = true;
                
                // Agregamos a la colección
                $collection->addItem($item);
            }
            
            // Los links para la paginación
            $collection->links = $pagination->getLinks();
            return $collection;
        }
        
        return false;
    }
}
{'fraction_non_alphanumeric': 0.1111111111111111, 'fraction_numerical': 0.0016877637130801688, 'mean_word_length': 1.437285812200137, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 21, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6495816', 'n_tokens_mistral': 999, 'n_tokens_neox': 978, 'n_words': 272}