Q: ¿Cuándo se ponen los paréntesis en Laravel y cuando no? Hay una cosa muy curiosa que me pasa con Laravel, y es que no termino de entender por qué a veces hay que poner paréntesis y otras veces no. Ejemplo:
Tengo un Accesor que me dice el carro activo de un usuario (carro de la compra).
Cuando lo pongo así NO funciona: 
$carrito = $this->carts->where('estado', 'activo')->first();

El fallo (Trying to get property 'carrito_activo' of non-object), es decir, cuando instancia una variable del modelo App\User para saber cual es su carro activo.
Sin embargo, cuando le pongo paréntesis a la relación que es carts dentro de productos (public function carts()).
Sí que me funciona.
$carrito = $this->carts()->where('estado', 'activo')->first();


A: En las relaciones de Laravel, cuando las llamas CON paréntesis, estás llamando el método definido en el modelo, que es la relación como tal, no son objetos.
/**
 * Get the Carts associated with the user.
 *
 * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
 */
public function carts()
{
    return $this->belongsTo(User::class);
}

Cuando llamas a la relación SIN paréntesis, estás llamando el/los objetos que están relacionados con el objeto referente, es como si hicieras la consulta al modelo.
dump($user->carts); // arroja una colección de objetos (normalmente)


Una forma sencilla de ver la diferencia, es obteniendo el mismo resultado con las dos formas mencionadas:
$user->carts;

es lo mismo que
$user->carts()->get();


A: Las relaciones de los modelos en laravel pretenden que puedan utilizarse directamente desde el modelo inicial de forma que 


*

*Si tu modelo usuario tiene la función carts y esta es 


return $this->hasMany(Cars::class);

Entonces lo que hace la función $this->carts es
Carts::where('user_id', $user->id)->get();

Observa que inicia el query builder pero termina con get motivo por el cual te arroja el error que mencionas


*En cambio si en lugar de hasMany tienes


return $this->hasOne(Cars::class);

Entonces lo que hace la función $this->carts es
Carts::where('user_id', $user->id)->first();

Hace lo mismo pero la última función en first, ahí si funcionaria de la forma que esperas


*Para ambos casos, si necesitas ser más especifico a la hora de buscar los elementos de las relaciones, debes "abrir" el query builder y para ello es el uso de los paréntesis, entonces al ejecutar 


$this->cards()

Inicias lo siguiente
Cards::where('user_id', $user->id);

Ahi puedes agregar cualquier función de eloquent, pero debes finalizar con get o first
