【发布时间】:2019-12-15 05:28:00
【问题描述】:
我有一个数据库表用户,列表 用户表:
id, name, email, password
列表表:
id, title, seller_id
列表迁移:
public function up()
{
Schema::create('listings', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('title');
$table->bigInteger('seller_id')->unsigned();
$table->timestamps();
$table->foreign('seller_id')->references('id')->on('users')->onDelete('cascade');
});
}
用户模型:
public function listings()
{
return $this->hasMany(Listing::class);
}
上市模式:
public function seller()
{
return $this->belongsTo(User::class, 'seller_id', 'id');
}
列表资源:
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class ListingResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return parent::toArray($request);
}
}
列表控制器:
public function index()
{
return ListingResource::collection(auth()->user()->listings()->latest());
}
我不断收到此错误:
“SQLSTATE[42S22]: 找不到列: 1054 'where 子句'中的未知列'listings.user_id' (SQL: select * from listings where listings.user_id = 1 和listings。 user_id is not null order by created_at desc limit 1)"
即使我在 User.php 模型中专门将 'seller_id' 作为外键,它为什么会返回以 user_id 作为外键的查询?
我已经试过了:
public function listings()
{
return $this->hasMany(Listing::class, 'seller_id');
}
据我所知,这可以工作,但这会产生以下错误:
"调用未定义的方法 Illuminate\Database\Eloquent\Relations\HasMany::mapInto()"
【问题讨论】:
-
查看这篇文章以了解您的最后一个错误stackoverflow.com/questions/47710805/…
-
如果你这样做
auth()->user()->listings()->latest()->get()是否有效?->latest()实际上并不执行查询;它是->orderBy('created_at', 'desc')的简写,所以此时你有一个Builder实例而不是Collection。 -
@TimLwis 拍摄。我错过了那个小细节。这为我解决了这个问题。非常感谢!
标签: php mysql laravel laravel-5.8