Pregunta

Estoy tratando de entender el elocuente ORM.He creado un blog de publicaciones básico.

Quiero agregar tipos de publicaciones a mis publicaciones, cada publicación solo debe tener un tipo.

Tipos de publicaciones:Publicación de noticias Publicación de video Publicación de blog

Estructura de la base de datos:

Mesa:archivo

id
title
content
created_at
updated_at
excerpt
deleted_at
status

Mesa:tipos

id
name
created_at
updated_at

Mesa:tipo_archivo

id
archive_id
type_id
created_at
updated_at

Modelos:

Modelo:Archivo

class Archive extends Eloquent
{
    protected $fillable = array('title', 'content', 'excerpt');



    public function type()
    {
        return $this->belongsToMany('Type');
    }

}

Modelo:Tipo

class Type extends Eloquent
{

    protected $fillable = array('name');
}

Esto funciona cuando se ejecuta:

Archive::with(array('type'))->orderBy('id', 'DESC')->get();

Pero devuelve una colección, creo que esto está mal porque sólo debería devolver un resultado.

El otro problema que tengo es cómo agregar una nueva fila al archive_type base de datos para una nueva publicación.

Se agradece cualquier ayuda.

¿Fue útil?

Solución

  1. Siempre se devuelve una colección ya sea que haya cero o 1 millón de resultados.La única excepción a esta regla son los métodos "buscar", donde están pensados ​​para usarse como método de búsqueda de clave principal, en cuyo caso, solo puede haber cero o uno resultado, por lo que devolverá el modelo que encuentra en lugar de Una colección.El comportamiento que experimenta con su búsqueda es el esperado.

    Si deseas devolver el primer modelo, puedes colocar ->first() despues de ti ->get().

  2. Para crear un nuevo tipo de archivo inc.la relación que debes hacer:

    // Obtenga nuestro archivo y escriba modelos
    $archivo = Archivo::with(array('tipo'))->orderBy('id', 'DESC')->get()->first();
    $tipo = Tipo::where('nombre','=','video')->get()->first();

    // ¡adjuntarlos!
    $archivo->tipo()->adjuntar($tipo);

Editar:Cómo mostrar en la plantilla de hoja.

Para pasar la colección (o cualquier dato) a la vista, haga esto en su controlador:

return View::make('yourview')->with('archives', $archives);

Para recorrer una colección en una plantilla de hoja, use @foreach

@foreach ($archives as $archive)
    <p>This is archive id is {{ $archive->id }}</p>
@endforeach

de lo contrario, si has pasado por un solo modelo en lugar de una colección, puedes hacerlo

    <p>This is archive id is {{ $archive->id }}</p>

Si va a preguntar "¿cómo muestro el primer modelo de una colección en la vista?", la respuesta simple es, primero saque el modelo de la colección y luego páselo a su vista; cualquier otra cosa requeriría "lógica de negocios". en tu opinión.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top