【问题标题】:Unable to maintain one to many relationship in Eloquent using laravel 5.3无法使用 laravel 5.3 在 Eloquent 中保持一对多关系
【发布时间】:2017-02-22 12:20:51
【问题描述】:

我使用的是 laravel eloquent 模型,所以有三个表 tempsocials、tempusers 和 tempdevices。因此一个用户可以拥有多个设备和多个社交帐户。 我为上表中的三个创建了一个模型,并试图保持如下关系之间的关系

这是我的 Tempuser 模型:

namespace App;

use Illuminate\Database\Eloquent\Model;

class Tempuser extends Model
{
    public function tempsocials(){
        return $this->hasMany('App\Tempsocial');
    }

    public function tempdevices(){
        return $this->hasMany('App\Tempdevice');
    }
}

这是我的 Tempdevice 模型:

 namespace App;

use Illuminate\Database\Eloquent\Model;

class Tempdevice extends Model
{
    public function tempusers(){

        return $this->belongsTo('App\Tempuser');
    }
}

这是最后一个 Tempsocial 模型:

namespace App;

use Illuminate\Database\Eloquent\Model;

class Tempsocial extends Model
{
    public function tempusers(){

        return $this->belongsTo('App\Tempuser');
    }
}

现在这是我的控制器,我想在其中检索特定用户的所有设备和社交帐户

    namespace App\Http\Controllers;

    use Illuminate\Http\Request;
    use Illuminate\Database\Eloquent\Collection;
    use App\Http\Requests;
    use App\tempLogin;
    use App\Tempdevice;
    use App\Tempuser;
    use App\Tempsocial;

    class loginController extends Controller
    {
        public function check_credentials(Request $request){

          $count=0;

          if($request->header('content-type')=='application/json'){


            $temp=new Tempuser;
            $devices = $temp->tempdevices();
            return $devices;

          }
       }
  }

但我收到以下错误:

类 Illuminate\Database\Eloquent\Relations\HasMany 的对象可以 不能转成字符串

【问题讨论】:

    标签: laravel laravel-5.3


    【解决方案1】:

    您正在创建一个新的Tempuser(),它没有 id,因此您的关系没有按预期返回任何内容,您需要将 id 传递给方法,使用该 id 您可以执行以下操作:

    Tempuser::find($id);
    

    这将返回一个实际模型,而不是创建一个新模型。

    另外,因为当您调用 ->tempdevices() 作为函数时,它会返回一个查询生成器,而不是当您调用 ->tempdevices 时,它会返回一个集合,请像这样更改它:

    $devices = $temp->tempdevices;
    

    另外,如果您期望一个 json 响应(如果不是这种情况,您可以忽略这部分),最好在您的回报中也说明它:

    return response()->json($devices);
    

    【讨论】:

    • 我按照您的建议进行了更改,但我仍然有一个空白的 json 响应。
    • 那么你的 if 语句返回 false 因为它不会给你任何返回值,如果你删除 if 语句会发生什么?
    • 为什么我需要 $request->ajax()。对不起,但我不知道。其实我是初学者。
    • 那么您的 if 语句似乎是用于检查请求是否是 ajax 对吗?$request->ajax() 正是为您做的 :),但是您可以尝试删除 if 语句并检查它是否返回那么json呢? (如预期)
    • 我删除了 if 条件,但我仍然得到一个空白的 json 响应。
    猜你喜欢
    • 2013-02-09
    • 1970-01-01
    • 2017-04-28
    • 1970-01-01
    • 2017-04-20
    • 2021-04-21
    • 2013-01-05
    • 2017-07-17
    • 2019-06-13
    相关资源
    最近更新 更多